За последние пару дней несколько раз наблюдал следующую ситуацию:
nginx переставал отвечать на запросы, при этом уходя в top с 99.9% cpu
load.
OS Debian Sarge, kernel 2.6.11.9, nginx 0.3.12.
В access-логе не вижу ничего подозрительного, в error-логе обычно видно
следующее:
2005/12/11 03:01:02 [alert] 10578#0: *58941 the http output chain is
empty while sending to client, client: x.x.x.x
2005/12/11 03:04:07 [alert] 10577#0: worker process 10578 exited on
signal 9
Вторая строчка - это, скорее всего, после моего kill'a, но я не уверен.
Нагрузка маленькая, около 60 active connections. nginx слушает только
https, несколько http-проксирований с proxy_buffering off и несколько
https проксирований. Использую 1 worker, метод обработки соединения не
указываю, т.е. юзается самый оптимальный по мнению nginx, насколько я
понимаю.
Подскажите, пожалуйста, на что еще можно посмотреть во время
возникновения проблемы? Из-за чего это может быть?
Если в nginx.conf поставить
debug_points abort;
working_directory /spool/core;
то после сообщения "[alert] the http output chain is empty" nginx вызовет
abort() и будет корка в каталоге /spool/core. Чтобы от корки была польза,
nginx должен быть собран с ключём -g (обычно он так и собирается).
Обычный пользователь, под которым работают рабочие процессы, должен
имет права записи в каталог /spool/core. Кроме того, limits -c должен
быть достаточным.
Игорь Сысоев
http://sysoev.ru