Estou brincando com o ajuste de várias configurações de tcp para um alto número de conexões de clientes de saída. Eu coloquei o seguinte no meu /etc/sysctl.conf no Ubuntu 16.04.
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
Eu os apliquei usando sysctl -p
, em seguida, fiz uma nova conexão com um dos meus servidores usando o netcat e encerrei:
nc 35.158.221.XXX 22
Então eu verifiquei o netstat usando o seguinte comando:
netstat -on | grep TIME_WAIT | less
Em todas as situações, a conexão foi removida corretamente dentro de um período de 3 segundos.
Agora, o problema:
Logo após, iniciei um script python com vários threads gerando conexões http de saída. Nesse script, no entanto, o estado TIME_WAIT das conexões está expirando STILL após o número padrão de 60 segundos.
Qualquer razão pela qual isso está acontecendo e as conexões do python estão ignorando a configuração do kernel? Como isso é possível? Por que a configuração não está sendo aplicada a esse processo? Eu esqueci de liberar algum cache ou algo assim?