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
|