ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Linux 2.6 epoll Connection timed out



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

Attachment: conf.tar.gz
Description: application/gzip

Attachment: error_log.gz
Description: application/gzip



 




Copyright © Lexa Software, 1996-2009.