Одне, що ви повинні зробити для початку - це виправити net.ipv4.tcp_fin_timeout=1
. Це шлях до мінімуму, ви, мабуть, не повинні сприймати набагато нижче 30.
Оскільки це за nginx. Чи означає це, що nginx діє як зворотний проксі? Якщо це так, то ваші з'єднання є 2x (один до клієнта, один до ваших веб-серверів). Чи знаєте ви, до якого кінця належать ці розетки?
Оновлення:
fin_timeout - це тривалість перебування у FIN-WAIT-2 (з networking/ip-sysctl.txt
документації на ядро):
tcp_fin_timeout - INTEGER
Time to hold socket in state FIN-WAIT-2, if it was closed
by our side. Peer can be broken and never close its side,
or even died unexpectedly. Default value is 60sec.
Usual value used in 2.2 was 180 seconds, you may restore
it, but remember that if your machine is even underloaded WEB server,
you risk to overflow memory with kilotons of dead sockets,
FIN-WAIT-2 sockets are less dangerous than FIN-WAIT-1,
because they eat maximum 1.5K of memory, but they tend
to live longer. Cf. tcp_max_orphans.
Я думаю, що вам, можливо, доведеться просто дозволити Linux утримувати номер сокета TIME_WAIT порівняно з тим, що виглядає як, можливо, 32k кришка на них, і ось тут Linux переробляє їх. На це 32 к. Посилається на це посилання :
Крім того, я вважаю / proc / sys / net / ipv4 / tcp_max_tw_buckets заплутаною. Хоча за замовчуванням встановлено 180000, я бачу зрив TCP, коли у мене в системі 32K сокети TIME_WAIT, незалежно від максимуму два відра.
Це посилання також говорить про те, що стан TIME_WAIT становить 60 секунд і не може бути налаштований через proc.
Випадкові
випадки веселощів: Ви можете бачити таймери на час очікування за допомогою netstat для кожної розеткиnetstat -on | grep TIME_WAIT | less
Повторне використання Vs Recycle:
Це щось цікаве, воно звучить як повторне ввімкнення повторного використання розеток time_Wat, і переробка переводить його в режим TURBO:
tcp_tw_recycle - BOOLEAN
Enable fast recycling TIME-WAIT sockets. Default value is 0.
It should not be changed without advice/request of technical
experts.
tcp_tw_reuse - BOOLEAN
Allow to reuse TIME-WAIT sockets for new connections when it is
safe from protocol viewpoint. Default value is 0.
It should not be changed without advice/request of technical
experts.
Я б не рекомендував використовувати net.ipv4.tcp_tw_recycle, оскільки це спричиняє проблеми з NAT-клієнтами .
Можливо, ви можете спробувати не ввімкнути обох із них і подивитися, який ефект це має (Спробуйте один за одним і подивіться, як вони працюють самостійно)? Я б використовував netstat -n | grep TIME_WAIT | wc -l
для швидшого зворотного зв'язку, ніж Мунін.