다수의 나가는 클라이언트 연결을 활성화하기 위해 다양한 TCP 설정을 조정하려고 합니다. Ubuntu 16.04의 /etc/sysctl.conf에 다음을 넣었습니다.
net.ipv4.ip_local_port_range = 18000 65535 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 3
이를 적용한 sysctl -p
다음 netcat을 사용하여 서버 중 하나에 새 연결을 만든 다음 종료했습니다.
nc 35.158.221.XXX 22
그런 다음 다음을 사용하여 netstat를 확인했습니다.
netstat -on | grep TIME_WAIT | less
각각의 경우 3초 이내에 연결이 올바르게 삭제됩니다.
이제 질문은 다음과 같습니다.
위의 내용 직후에 나가는 http 연결을 생성하는 많은 스레드가 포함된 Python 스크립트를 시작했습니다. 그러나 이 스크립트에서는 연결의 TIME_WAIT 상태가 기본 60초 후에 만료됩니다.
왜 이런 일이 발생하고 Python의 연결이 커널 설정을 무시합니까? 이것이 어떻게 가능한지? 이 설정이 이 프로세스에 적용되지 않는 이유는 무엇입니까? 캐시 같은 것을 새로 고치는 것을 잊었나요?