시작하기 위해해야 할 한 가지는를 수정하는 것 net.ipv4.tcp_fin_timeout=1
입니다. 그것은 낮게하는 방법입니다. 아마 30보다 훨씬 낮게는 안될 것입니다.
이것은 nginx 뒤에 있습니다. 이것은 nginx가 리버스 프록시로 작동한다는 것을 의미합니까? 이 경우 연결은 2 배입니다 (하나는 클라이언트에, 하나는 웹 서버에). 이 소켓이 어느쪽에 속하는지 알고 있습니까?
업데이트 :
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.
아마 당신은 리눅스가 TIME_WAIT 소켓 번호를 32k 캡처럼 유지하도록해야한다고 생각합니다. 이곳에서 리눅스가 그것들을 재활용합니다. 이 링크 에서이 32k가 언급됩니다 .
또한 / proc / sys / net / ipv4 / tcp_max_tw_buckets가 혼동되는 것을 발견했습니다. 기본값은 180000으로 설정되어 있지만 최대 tw 버킷에 관계없이 시스템에 32K TIME_WAIT 소켓이 있으면 TCP 중단이 발생합니다.
이 링크는 또한 TIME_WAIT 상태가 60 초이며 proc을 통해 조정할 수 없음을 나타냅니다.
임의의 재미있는 사실 :
각 소켓마다 netstat를 사용하여 타임 대기 시간에 타이머를 볼 수 있습니다 .netstat -on | grep TIME_WAIT | less
재사용 대 재활용 :
이것들은 흥미 롭습니다. 재사용은 time_Wait 소켓을 재사용 할 수 있고 재활용은 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.
NAT 클라이언트에 문제가 발생하므로 net.ipv4.tcp_tw_recycle을 사용하지 않는 것이 좋습니다 .
어쩌면 둘 다 켜지 말고 어떤 효과가 있는지보십시오 (한 번에 하나씩 시도하고 어떻게 작동하는지 확인하십시오)? netstat -n | grep TIME_WAIT | wc -l
Munin보다 빠른 피드백을 위해 사용 합니다.