Зависания fastcgi серверов

Igor Sysoev is at rambler-co.ru
Thu Sep 14 11:06:26 MSD 2006


On Thu, 14 Sep 2006, Sergey Serov wrote:

> On Saturday 09 September 2006 21:35, Sergey Serov wrote:
>> On Saturday 09 September 2006 19:36, Igor Sysoev wrote:
>>> On Sat, 9 Sep 2006, Sergey Serov wrote:
>>>> Имею следующую проблему.
>>>> Если у nginx выставлен таймаут напр. 10 сек., то иногда если fastcgi
>>>> сервер не успел уложиться в эти 10 сек. он зависает судя по strace в
>>>> read() того того файлового дескриптора, который судя по strace
>>>> используется для связи с nginx.
>>>>
>>>> Проблема эта мучала меня сильно, главным обзазом тем, что я долго не
>>>> мог понять природу зависаний. Но вроде сейчас все изучил, стало легче.
>>>>
>>>> По идее такого быть не должно, т.к. fastcgi должен получить broken pipe
>>>> и завершить работу.
>>>>
>>>> Fastcgi сервер - скрипт Catalyst'a, который использует испытанный
>>>> перловый модуль FCGI::ProcManager который живет без изменений аж 5 лет
>>>> уже. Он в свою очередь использует CGI::Fast, который изменяется чаще.
>>>>
>>>> Кто тут виноват пока незнаю.
>>>>
>>>> Пока сделал pkill -9 -f perl-fcgi если не curl -sm 15 url.
>>>>
>>>> Видимо, правильнее всего написать свой ProcManager.
>>>>
>>>> У кого-нибудь были аналогичные проблемы и каковый были способы решения?
>>>
>>> Судя по тому, что используется strace - это Линукс.
>>
>> Во FreeBSD я тоже strace использую, даже использовал когда еще на Линукс не
>> мигрировал, чем-то он мне больше нравился чем truss.
>> Но в данном случае это Линукс.
>>
>>> Какое ядро ?
>>
>> 2.6.8-2-386
>>
>>> У меня последнее время на ядрах 2.6.x есть обратные сообщения - когда
>>> сервер закрывает соединение - а nginx об этом не знает.
>>
>> В strace периодически вижу broken pipe на дескриптор коннекшина с nginx,
>> при этом соотв. fastcgi продолжает работу.
>>
>> Сперва думал что проблема из-за firewall'а который немного необычно
>> настраивается в отличии от ipfw. Но проблема не пропадала после его
>> отключения.
>>
>> Можно с этим что-то поделать?
>
> Зависания иногда бывают фатальные.
> Зависает один процесс fastcgi в статусе R и съедает весь процессор.
> Кильнуть его нельзя, даже -9. PPID у него становится 1. Убить его вообще не
> возможно, можно только ребутнуть сервер.
> Несколько часов поиска результатов не принесли.
> Задница полная :-(((

Судя по симптомам, дело не в nginx'е, и не в fastcgi, а в ядре.
Я могу сделать небольшой test-case того, что я видел во взаимодействии
nginx/trac, но писать в lkml у меня нет никакого желания. Если есть
желающие, то могу сделать.


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list