Connection reset by peer в Nginx

Главные вкладки

Аватар пользователя axel axel 18 ноября 2007 в 15:19

Вот этот странный баг не даёт покоя drupal.ru последнее время - проявляется в ошибках 404 и 500 на некоторых страницах. Другим сайтам хостинга помогло увеличение временных лимитов fastcgi_*_timeout и буферов в nginx, но на drupal.ru проблемы сохранились. Пока сайт не перенесён на новый сервер, попробую собрать на Gentoo новое ядро.

Комментарии

Аватар пользователя VLAD_X VLAD_X 18 ноября 2007 в 17:18

Таймауты в PHP тоже достаточные? Памяти хватает? Ограничение по кол-ву одновременных соединений, процессов?
"Connection reset by peer" - это ведь значит, что backend отвалился, а не только nginx'у надоело ждать от него ответа.

Аватар пользователя axel axel 18 ноября 2007 в 18:09

Угу, именно так, перезапуск fastcgi исправляет ситуацию на некоторое время. Но нельзя сказать, что fastcgi полностью подвисает, поскольку остальные сайты на php сохраняют работоспособность. Глюки сейчас проявляются только на drupal.ru. Лимит памяти в php - 48М, имхо достаточно. Текущие настройки fastcgi: 15 процессов, 1024 запроса до перезапуска каждого процесса (пробовал как уменьшать так и увеличивать оба параметра, от 5-30 процессов, до 512-16384 запросов). Не помогло.

Аватар пользователя cwer cwer 19 ноября 2007 в 0:48

попробуй пхп пересобрать
у меня была версия 4, вис постоянно
на 5й пока норм.
Запускаю через spawn-cgi

Аватар пользователя VLAD_X VLAD_X 18 ноября 2007 в 18:49

Глюки, значит, локальные, в пределах одного сайта.....
Ограничения на коннекты к БД есть? Сама БД не валится в это время?
Поделись конфигами nginx, PHP и MySQL (в приват)?

А что показывает top и netstat во время проблем?

Аватар пользователя axel axel 19 ноября 2007 в 19:15

В top ничего отличного от нормы, загрузка проца не выше обычного. Вывод netstat внимательно не разбирал, на первый взгляд общение nginx и fastcgi идёт нормально.

Вот в сислоге кстати что нашлось неоднократно:

php-cgi[15845]: segfault at 00002c9c700e3fc8 rip 00000000005fe05f rsp 00007fff3dfb3030 error 4

Аватар пользователя axel axel 19 ноября 2007 в 20:28

Конфиги не секретны, кидаю сюда. Вот только чего-то я сегодня правил и похоже глючить перестало (понять бы ещё что правил и перестало ли?)

Аватар пользователя VLAD_X VLAD_X 21 ноября 2007 в 11:52

Я бы попробовал так

nginx.conf

worker_processes 5;
events {
 worker_connections 1024; # если в spawn-fcgi.conf PHP_FCGI_MAX_REQUESTS=1024, то зачем зедсь бОльшее число?
 use epoll; # типа быстрее других
}
http {
 keepalive_timeout 5 5; # кроме самой страницы ведь тянутся ещё и картинки и пр. мелочь - вот и пусть идут в одном соединении
 reset_timedout_connection on; # не все клиенты умеют закрывать соединения.....
 client_body_buffer_size 256k;
 client_max_body_size 10m; # зачем там было 48m ? Здесь такие большие файлы загружают?
 large_client_header_buffers 8 16k;
 gzip on;
 gzip_comp_level 5;
 gzip_min_length 4096;
 gzip_proxied any;
 gzip_types text/plain text/css application/x-httpd-php application/x-javascript application/xml;
# гзипуем всё, что больше 4096 байт (т.е. кроме мелких js и картнок)
}
Аватар пользователя axel axel 22 ноября 2007 в 12:38

Число рабочих процессов уже увеличил, а число коннектов такое большое, по той причине, что на машине живут несколько сайтов не на PHP, в т.ч. сайт отдающий только статику (картинки), причём дохрена отдающий. Хотя возможно 16384 тож много, попробую уменьшить. client_max_body_size - на drupal.ru не загружают, но это нужно для другого сайта. Остальные части конфига осмыслю, попробую, спасибо.

Аватар пользователя kiev1 kiev1 23 ноября 2007 в 0:24

Segfault очень часто сопутствует генте - если собирать все из исходников то весьма вероятно можно получить непредсказуемый результат, у меня хоть и несколько серверов на генте работают, но очень часто я натыкался на segfault при своих экспериментах, да и обновлять потом все это очень долго и неудобно, путем долгих мучений пришел к выводу что сегодня лучше убунта-редхет-дебиан...

Или вполне возможно что nginx просто не может дождаться результата от php и обрывает по тайм ауту.

Если дело действительно в segfault - то надо убрать из /etc/make.conf все левые флаги оптимизации и из php тоже все ненужное, потом нажать emerge --sync и пересобрать все типа emerge -eN world, но там уже очень долго ждать.

Аватар пользователя axel axel 23 ноября 2007 в 2:35

Сервер достался уже с Генту на борту. Пришлось срочно изучать её методики работы. Так я тоже на дебиане ставлю сервера, исходя из принципа, что майнтенеры пакетов лучше разберутся в сборке, пусть в результате и будет оно медленней работать Smile

Аватар пользователя axel axel 23 ноября 2007 в 2:37

Влад, не смущай Smile После не особо успешной борьбы с этим fastcgi я себя и так чувствую полным идиотом Sad

Аватар пользователя VLAD_X VLAD_X 23 ноября 2007 в 7:54

Может-таки вернуть backend на Apache? Wink Собрав с минимумом модулей и отдав авторизации/реврайты/доступы/и т.п. nginx'у. Этот вариант проверен годами и стабилен как скала.

Аватар пользователя axel axel 23 ноября 2007 в 17:49

Уже договорился о переезде сайта со Stalker-g2. У него как раз так - Апач после Nginx.
Но со старым сервером проблема остаётся - просто любопытно уже добиться адекватной работы Drupal с Nginx.

Аватар пользователя Mental Mental (не проверено) 25 ноября 2007 в 22:00

Также поймал проблему с нехваткой nginx_worker_connections при работе торрент-трекера. Правда нагрузка там тоже дай боже ...
Увеличение числа воркеров в nginx & fastcgi результатов не дало ...