Por padrão, o estado TCP TIME_WAIT dura 60 segundos no kernel Linux. Em cenários TCP de alta carga, reduzir esse timeout melhora o desempenho da rede. O Alibaba Cloud Linux 2 (versão do kernel 4.19.43-13.al7 e posteriores) e o Alibaba Cloud Linux 3 introduzem o parâmetro de kernel net.ipv4.tcp_tw_timeout para configurar esse valor.
A partir do Alibaba Cloud Linux 4, este parâmetro está descontinuado.
Informações básicas
O acúmulo excessivo de conexões no estado TIME_WAIT degrada o desempenho da rede. Esse cenário é comum em servidores que lidam com grande volume de conexões de curta duração. O estado TCP/IP TIME_WAIT corresponde a um período de espera após o fechamento de um socket pela aplicação. Durante esse intervalo, a pilha TCP/IP mantém o socket aberto para garantir a transferência completa dos dados entre servidor e cliente. A espera padrão é de 60 segundos. O Alibaba Cloud Linux oferece o parâmetro net.ipv4.tcp_tw_timeout para reduzir esse timeout em cenários de alta concorrência. O intervalo válido varia de 1 a 600 segundos.
Observações de uso
Reduzir o timeout TIME_WAIT para menos de 60 segundos contraria o conceito de "tempo de silêncio" do TCP/IP. Essa alteração pode fazer com que a pilha TCP aceite pacotes antigos e atrasados como novos dados ou rejeite pacotes novos válidos como duplicatas. Ajuste esse valor apenas sob orientação de um especialista em redes. Para mais informações, consulte IETF RFC 793.
Diferenças nas versões do kernel e nas configurações de parâmetros, como
tcp_tw_reuse(consulte Otimização da configuração do sistema) etcp_tw_recycle(consulte Diferenças entre o Alibaba Cloud Linux 3 e o CentOS 7), podem elevar o número de conexões TIME_WAIT no Alibaba Cloud Linux em comparação a outras distribuições, como o CentOS 7. Esse comportamento é esperado.Na configuração padrão do Alibaba Cloud Linux, a quantidade de conexões no estado TIME_WAIT permanece abaixo de 5.000, com impacto insignificante no desempenho da rede.
Métodos de configuração
Os métodos a seguir modificam o parâmetro net.ipv4.tcp_tw_timeout. Substitua [$TIME_VALUE] pelo valor de timeout em segundos.
Modificar este parâmetro pode causar interrupções no serviço. Execute esta operação fora dos horários de pico para minimizar o impacto nos negócios.
-
Use o comando
sysctlpara alterar o timeout. A mudança entra em vigor imediatamente, mas não persiste após reinicializações.sudo sysctl -w "net.ipv4.tcp_tw_timeout=[$TIME_VALUE]" -
Grave o valor diretamente em
/proc/sys/net/ipv4/tcp_tw_timeout. A alteração tem efeito imediato, porém não persiste após reinicializações.sudo sh -c "echo [$TIME_VALUE] > /proc/sys/net/ipv4/tcp_tw_timeout" -
Edite o arquivo
/etc/sysctl.confpara tornar a mudança persistente entre reinicializações.-
Abra o arquivo
/etc/sysctl.confem um editor de texto, como ovim.sudo vim /etc/sysctl.conf -
Pressione
ipara entrar no modo de inserção e adicione ou modifique a seguinte linha ao final do arquivo.net.ipv4.tcp_tw_timeout = [$TIME_VALUE] Pressione
Esc, digite:wqe pressioneEnterpara salvar e sair.-
Aplique as alterações sem reiniciar o sistema.
sudo sysctl -p -
Verifique se o valor foi atualizado.
sysctl net.ipv4.tcp_tw_timeout
-
Execute o comando netstat -ant | grep TIME_WAIT | wc -l para contar o número de conexões atualmente no estado TIME_WAIT.
Para servidores que processam alto volume de conexões efêmeras — como o Nginx atuando como proxy de camada 7 — a Alibaba Cloud recomenda definir [$TIME_VALUE] como 5 (timeout TIME_WAIT de 5 segundos).