Ao executar ss -lnt em uma instância Elastic Compute Service (ECS) com Alibaba Cloud Linux 2 e observar Send-Q com valor 0 para todos os sockets em escuta, saiba que isso é uma limitação conhecida do kernel, não um problema de rede. Atualize o kernel para resolver essa situação.
Sintomas
A execução de ss -lnt gera uma saída semelhante à abaixo, em que Send-Q apresenta 0 em todas as entradas:
# ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 0 *:35107 *:*
LISTEN 0 0 *:38727 *:*
LISTEN 0 0 *:5355 *:*
LISTEN 0 0 *:111 *:*
Em um socket TCP em escuta, Send-Q indica o tamanho máximo do syn backlog, ou seja, a quantidade máxima de solicitações de conexão pendentes que o socket consegue enfileirar. Esse valor deve ser sempre diferente de zero em um sistema íntegro.
Versões afetadas
Esse problema afeta instâncias que executam as seguintes versões:
|
Componente |
Versões afetadas |
|
Imagem |
|
|
Kernel |
|
Para verificar a versão atual do kernel, execute:
uname -r
Causa
O módulo de kernel tcp_diag não está presente no kernel 4.19.43-13.al7.x86_64 nem em versões anteriores. Sem o tcp_diag, o comando ss recorre à leitura de /proc/net/tcp (prática não recomendada). Nesse modo alternativo, o valor de tx_queue para sockets TCP em escuta é sempre 0, o que faz Send-Q exibir 0.
Pré-requisitos
Antes de atualizar o kernel:
Faça backup dos dados críticos da instância.
Consulte as notas de versão do Alibaba Cloud Linux 2 para compreender as alterações de compatibilidade na versão de kernel de destino.
Agende a atualização para horários de menor movimento e minimize o impacto nos serviços.
Atualizações de kernel podem introduzir problemas de compatibilidade e estabilidade. Leia as notas de versão antes de continuar. Reiniciar a instância interrompe temporariamente seu funcionamento e pode afetar serviços em execução, causando perda de dados. Faça backup dos dados críticos antes de reiniciar.
Solução
Etapa 1: Confirme a ausência do módulo tcp_diag
sudo lsmod | grep tcp_diag
Analise a saída conforme descrito abaixo:
Sem saída: O módulo
tcp_diagnão está carregado. Isso confirma a causa raiz. Prossiga para a etapa 2.Saída exibida: O módulo está carregado. O valor
0emSend-Qtem outra origem. Investigue mais antes de prosseguir.
Etapa 2: Atualize o kernel
sudo yum update kernel
Etapa 3: Reiniciar a instância
sudo reboot
Após reinicializar a instância com o novo kernel, o módulo tcp_diag passa a estar incluído e o comando ss -lnt retorna valores precisos para Send-Q.