Linux 2.6 epoll Connection timed out

voron voron at amhost.net
Thu Jan 18 11:17:43 MSK 2007


Hello
При обрыве закачки со стороны клиента(отмены закачки в опере, обрыва 
вгета и тп...) nginx не закрывает сокет до истечения send_timeout, хотя 
ОСь уже закрыла соединение.
Всё бы ничего, но в этом случае ограничение сессий работает не так, как 
надо - зависший сокет считается активным и входит в лимит.

lsof воркера до закачки
noname nginx # ps uaxf|grep nginx
root     25898  0.0  0.0   3476   456 ?        Ss   01:02   0:00 nginx: 
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx    25899  0.0  0.1   3636  1076 ?        S    01:02   0:00  \_ 
nginx: worker process
noname nginx # lsof -p 25899
COMMAND   PID  USER   FD   TYPE     DEVICE    SIZE     NODE NAME
...
nginx   25899 nginx    0u   CHR        1,3              778 /dev/null
nginx   25899 nginx    1u   CHR        1,3              778 /dev/null
nginx   25899 nginx    2u   REG        3,3    1650  2087309 
/var/log/nginx/error_log
nginx   25899 nginx    3u   REG        3,3    1650  2087309 
/var/log/nginx/error_log
nginx   25899 nginx    4u   CHR      136,8               10 /dev/pts/8
nginx   25899 nginx    5u   REG        3,3   48691  2087310 
/var/log/nginx/nnm.access_log
nginx   25899 nginx    6w  FIFO        0,5         15401779 pipe
nginx   25899 nginx    7u   REG        3,3    2241  2087311 
/var/log/nginx/nnm.flv.access_log
nginx   25899 nginx    8u  IPv4   15480431              TCP *:hosts2-ns 
(LISTEN)
nginx   25899 nginx   10u  unix 0xc1b9c3c0         15480434 socket
nginx   25899 nginx   11r  0000        0,9       0 15480435 eventpoll
noname nginx # netstat -tnep|grep :81
noname nginx #

lsof во время закачки

noname nginx # lsof -p 25899
COMMAND   PID  USER   FD   TYPE     DEVICE      SIZE     NODE NAME
...
nginx   25899 nginx    0u   CHR        1,3                778 /dev/null
nginx   25899 nginx    1u   CHR        1,3                778 /dev/null
nginx   25899 nginx    2u   REG        3,3    370717  2087309 
/var/log/nginx/error_log
nginx   25899 nginx    3u   REG        3,3    370717  2087309 
/var/log/nginx/error_log
nginx   25899 nginx    4u   CHR      136,8                 10 /dev/pts/8
nginx   25899 nginx    5u   REG        3,3     48842  2087310 
/var/log/nginx/nnm.access_log
nginx   25899 nginx    6w  FIFO        0,5           15401779 pipe
nginx   25899 nginx    7u   REG        3,3      2241  2087311 
/var/log/nginx/nnm.flv.access_log
nginx   25899 nginx    8u  IPv4   15480431                TCP 
*:hosts2-ns (LISTEN)
nginx   25899 nginx    9u  IPv4   15483986                TCP 
192.168.15.1:hosts2-ns->192.168.15.77:3173 (ESTABLISHED)
nginx   25899 nginx   10u  unix 0xc1b9c3c0           15480434 socket
nginx   25899 nginx   11r  0000        0,9         0 15480435 eventpoll
nginx   25899 nginx   12r   REG       8,17 124581120  5882064 
/mnt/123/BestFilms/Fight club.avi.flv
noname nginx # netstat -tnep|grep :81
tcp        0  23360 192.168.15.1:81         192.168.15.77:3173      
ESTABLISHED 107        15483986   25899/nginx: worker
noname nginx #

lsof после обрыва закачки, но до прошесвия send_timeout

noname nginx # lsof -p 25899
COMMAND   PID  USER   FD   TYPE     DEVICE      SIZE     NODE NAME
...
nginx   25899 nginx    0u   CHR        1,3                778 /dev/null
nginx   25899 nginx    1u   CHR        1,3                778 /dev/null
nginx   25899 nginx    2u   REG        3,3   1103770  2087309 
/var/log/nginx/error_log
nginx   25899 nginx    3u   REG        3,3   1103770  2087309 
/var/log/nginx/error_log
nginx   25899 nginx    4u   CHR      136,8                 10 /dev/pts/8
nginx   25899 nginx    5u   REG        3,3     48842  2087310 
/var/log/nginx/nnm.access_log
nginx   25899 nginx    6w  FIFO        0,5           15401779 pipe
nginx   25899 nginx    7u   REG        3,3      2241  2087311 
/var/log/nginx/nnm.flv.access_log
nginx   25899 nginx    8u  IPv4   15480431                TCP 
*:hosts2-ns (LISTEN)
nginx   25899 nginx    9u  sock        0,4           15483986 can't 
identify protocol
nginx   25899 nginx   10u  unix 0xc1b9c3c0           15480434 socket
nginx   25899 nginx   11r  0000        0,9         0 15480435 eventpoll
nginx   25899 nginx   12r   REG       8,17 124581120  5882064 
/mnt/123/BestFilms/Fight club.avi.flv
noname nginx # netstat -tnep|grep :81
noname nginx #

В nginx_status'е после обрыва закачки
Active connections: 2
server accepts handled requests
 2 2 3
Reading: 0 Writing: 2 Waiting: 0

В дебаг логе смущают записи

2007/01/18 01:05:20 [debug] 25899#0: epoll: fd:9 ev:0019 d:080C0780
2007/01/18 01:05:20 [debug] 25899#0: epoll_wait() error on fd:9 ev:0019
2007/01/18 01:05:20 [debug] 25899#0: *1 http read blocked

Т.е судя по ev:0019 = EPOLLERR|EPOLLHUP|EPOLLIN данные пришли в сокет и 
nginx пытается их прочитать, но чтение блокируется по отсутсвии данных.

Ну и через минуту
2007/01/18 01:06:20 [info] 25899#0: *1 client timed out (110: Connection 
timed out) while sending flv to client

в конфиге nginx ничего военного нет

бага есть как на i386 SMP так и на AMD64  - оба с 2.6.18+
epoll1.tar.gz работает как надо на обоих серверах.

epoll_wait: 1, 00000005, 6
read: 8
read: 0
eof read

кусок дебаг лога и конфиг nginx вложил

-------
Alex
-------------- next part --------------
A non-text attachment was scrubbed...
Name: conf.tar.gz
Type: application/gzip
Size: 889 bytes
Desc: not available
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20070118/464a31c9/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: error_log.gz
Type: application/gzip
Size: 1961 bytes
Desc: not available
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20070118/464a31c9/attachment-0001.bin>


More information about the nginx-ru mailing list