Alexandre Snarskii
December 17, 2010 07:58AM
Hi!

Дано: Linux (RHEL 5.4, 2.6.18-164.el5), nginx/0.8.53 "без посторонних
добавок", простенькая fcgi на базе обычного fastcgi devel kit 2.4.0,
основная fcgi - считать запрос, обработать, выдать x-accel-redirect
для проксирования на правильный target server.
Общение nginx и fcgi - tcp на 127.0.0.1.

Вроде бы все просто, хорошо и должно работать - nginx в любом
случае принимает запрос полностью и только потом отдает его
на fastcgi_pass, так что на уровне fcgi можно верить что "медленных
клиентов не бывает" и использовать блокирующий интерфейс FCGX,
но...

В некоторых случаях accept возвращает "нечитаемый" сокет, и fcgi
тормозится на этапе:

(gdb) where
#0 0x004db402 in __kernel_vsyscall ()
#1 0x006c38db in read () from /lib/libc.so.6
#2 0x00dd3feb in OS_Read (fd=54, buf=0x8c44118 "@Et", len=8192)
at os_unix.c:460
#3 0x00dd12a0 in FillBuffProc (stream=0x8c36600) at fcgiapp.c:1636
#4 0x00dd1b82 in FCGX_Accept_r (reqDataPtr=0xb391f318) at fcgiapp.c:2208
#5 0x0804a119 in run (arg=0x8c2e3bc) at main.cc:91
#6 0x007545ab in start_thread () from /lib/libpthread.so.0
#7 0x006d2cfe in clone () from /lib/libc.so.6

и способна висеть в такой позе до рестарта, даже несмотря на
то, что с другой стороны nginx уже давно сокет закрыл (connection
state CLOSE_WAIT).

Вопрос вполне обычный - кто виноват и что делать ? :)
Сменить OS/библиотеку/полностью переписать на scgi ?

PS: внутри fastcgi есть такой интересный коммент, который
вроде бы полностью описывает данное поведение, но он относится
a) к linux 2.0 б) к unix domain sockets:

/**********************************************************************
* This works around a problem on Linux 2.0.x and SCO Unixware (maybe
* others?). When a connect() is made to a Unix Domain socket, but its
* not accept()ed before the web server gets impatient and close()s, an
* accept() results in a valid file descriptor, but no data to read.
* This causes a block on the first read() - which never returns!
--
In theory, there is no difference between theory and practice.
But, in practice, there is.

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

залипший сокет между nginx и fastcgi ?

Alexandre Snarskii December 17, 2010 07:58AM

Re: залипший сокет между nginx и fastcgi ?

Maxim Dounin December 17, 2010 09:04AM

Re: залипший сокет между nginx и fastcgi ?

Alexandre Snarskii December 17, 2010 09:20AM

Re: залипший сокет между nginx и fastcgi ?

Maxim Dounin December 17, 2010 09:46AM

Re: залипший сокет между nginx и fastcgi ?

Alexandre Snarskii December 24, 2010 02:04PM

Re: залипший сокет между nginx и fastcgi ?

Maxim Dounin December 24, 2010 02:52PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 95
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready