out of tcptw

Maxim Dounin mdounin на mdounin.ru
Ср Дек 7 15:52:57 UTC 2011


Hello!

On Wed, Dec 07, 2011 at 11:44:35AM +0400, Evgenii Davidov wrote:

> 
> товарищи ученые
> 
> вчера я на 5 минут выбежал из tcptw:
> 
> ITEM                     SIZE     LIMIT      USED      FREE  REQUESTS  FAILURES
> tcptw:                     52,    40968,    11922,    22638, 47803752,        0
> tcptw:                     52,    40968,    31451,     3109, 47835019,        0
> tcptw:                     52,    40968,    39130,      686, 47873887,        0
> tcptw:                     52,    40968,    40335,      633, 47889337,    26837
> tcptw:                     52,    40968,    40397,      571, 47889399,    69815
> tcptw:                     52,    40968,    40465,      503, 47889471,   112430
> tcptw:                     52,    40968,    40522,      446, 47889530,   153805
> tcptw:                     52,    40968,    35654,     5314, 47904332,   173111
> tcptw:                     52,    40968,    27982,    12986, 47932049,   173111
> 
> stub status при этом показывал:
> 
> Reading: 351 Writing: 50 Waiting: 6801
> Reading: 649 Writing: 78 Waiting: 6502
> Reading: 880 Writing: 152 Waiting: 6457
> Reading: 856 Writing: 209 Waiting: 6238
> Reading: 854 Writing: 167 Waiting: 6120
> Reading: 579 Writing: 43 Waiting: 6421
> Reading: 443 Writing: 41 Waiting: 6368
> 
> как вы думаете, правильно ли я понимаю что это произошло потому что было настроено:
> 
> worker_processes  4;
> worker_connections  2000;
> 
> и при приближении к 8000 nginx стал в срочном порядке закрывать 
> соединения и этих закрытых соединений в состоянии протухания 
> стало слишком много? 

Это произошло потому, что количество открываемых соединений было 
большое.

Вообще, вылезать за tcptw - это не страшно.  Ну не будет TIME_WAIT 
сокета, самое плохое что может случиться - это RST там, где его 
быть не должно.

> (по моим прикидкам клиентов было тыщ 11)
> 
> также было настроено
> 
> sysctl net.inet.tcp.fast_finwait2_recycle=1
> sysctl net.inet.tcp.finwait2_timeout=5000
> 
> за эти 5 минут успел 500 раз ругнуться named типа: client 84.53.200.24#1202: error sending response: not enough free resources

Это - отдельная и малосвязанная проблема (т.е. причина может быть 
та же самая, e.g. DoS, но никакого отношения к time_wait оно не 
имеет).  Скорее всего - переполнялась очередь на интерфейсе, и от 
этого происходил ENOBUFS, смотрите netstat -nid.

Maxim Dounin



Подробная информация о списке рассылки nginx-ru