Todos os produtos
Search
Central de documentação

:Solucionar o erro "kernel: nf_conntrack: table full, dropping packet"

Última atualização: Jun 23, 2026

Descrição do problema

Podem ocorrer perdas de pacotes ocasionais ao conectar a aplicações em uma instância ECS. Uma investigação revela que a rede externa da instância ECS está normal, mas os logs do kernel (dmesg) contêm a mensagem de erro kernel: nf_conntrack: table full, dropping packet. Esse problema afeta instâncias ECS com as seguintes características:

  • Imagem: aliyun-2.1903-x64-20G-alibase-20190327.vhd ou posterior

  • Kernel: kernel-4.19.24-9.al7 ou posterior

Causa

nf_conntrack é um módulo do kernel do Linux que rastreia entradas de conexão para Network Address Translation (NAT). O módulo nf_conntrack armazena conexões estabelecidas em uma tabela hash. Quando essa tabela hash fica cheia, novas conexões disparam o erro nf_conntrack: table full, dropping packet. Os principais parâmetros do módulo nf_conntrack incluem:

  • nf_conntrack_buckets: o tamanho da tabela hash de rastreamento de conexões. Especifique esse valor ao carregar o módulo ou modifique-o com o comando sysctl. Para sistemas com 4 GB ou mais de memória, o valor padrão é 65536.

  • nf_conntrack_max: o número máximo de conexões que o módulo nf_conntrack pode rastrear. Para sistemas com 4 GB ou mais de memória, o valor padrão é 262144. Esse valor padrão pode ser insuficiente para servidores que lidam com muitas conexões.

  • nf_conntrack_tcp_timeout_time_wait: o tempo que o nf_conntrack mantém a entrada de rastreamento de uma conexão TCP no estado TIME_WAIT. O valor padrão é 120s.

Soluções

Escolha a solução mais adequada ao seu caso de uso.

Solução 1: Ajustar os parâmetros do nf_conntrack

Determine o número máximo de conexões que a sua aplicação pode exigir e execute os seguintes comandos para ajustar os parâmetros do módulo nf_conntrack.

sysctl -w net.netfilter.nf_conntrack_max=1503232
sysctl -w net.netfilter.nf_conntrack_buckets=375808  # This option cannot be modified during runtime if the kernel version is not 4.19.
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=60
null

Os valores dos parâmetros nesses comandos são exemplos. Ajuste-os de acordo com a carga de trabalho real e os requisitos do seu negócio. Antes de fazer alterações, crie um snapshot ou faça backup dos arquivos importantes.

null

Revise as seguintes recomendações para configuração dos parâmetros:

  • Se a carga de trabalho envolve um grande número de conexões simultâneas e de curta duração, aumente os valores de nf_conntrack_max e nf_conntrack_buckets. Isso evita que a tabela hash do nf_conntrack fique cheia. Recomenda-se definir o valor de nf_conntrack_max como quatro vezes o valor de nf_conntrack_buckets.

  • Ajuste os parâmetros nf_conntrack_buckets e nf_conntrack_max juntos. Aumentar apenas nf_conntrack_max pode tornar as listas encadeadas na tabela hash longas demais, o que reduz a eficiência de busca. Alterar apenas nf_conntrack_buckets não resolve o problema.

  • Antes de ajustar o parâmetro nf_conntrack_tcp_timeout_time_wait, certifique-se de entender sua finalidade e efeitos potenciais. Ajuste esse parâmetro com cautela, com base no caso de uso da aplicação e nos resultados do monitoramento de desempenho. Os exemplos a seguir servem como referência para diferentes cenários:

    • Para serviços de alta concorrência que lidam com muitas conexões de curta duração, como um servidor web, considere definir nf_conntrack_tcp_timeout_time_wait com uma duração mais curta, como 30 ou 60 segundos. Isso limpa as entradas de rastreamento de conexão mais rapidamente, liberando capacidade para novas conexões. No entanto, certifique-se de que a aplicação tolera uma pequena quantidade de retransmissão de dados ou latência.

    • Se a aplicação exige integridade de dados extremamente alta, como um sistema de negociação financeira, é mais seguro manter o valor padrão de nf_conntrack_tcp_timeout_time_wait. Isso ajuda a garantir que todos os pacotes de dados sejam entregues corretamente.

    • Em ambientes com latência de rede alta ou instável, um valor mais curto para nf_conntrack_tcp_timeout_time_wait pode aumentar o risco de perda de dados. Recomenda-se uma configuração mais conservadora.

Solução 2: Filtrar conexões não rastreadas com regras iptables

Adicione regras iptables com o alvo -j NOTRACK para impedir que conexões específicas sejam rastreadas. As conexões que correspondem a essas regras não são adicionadas à tabela de rastreamento, o que evita que ela fique cheia.

sudo iptables -t raw -A PREROUTING -p udp -j NOTRACK
sudo iptables -t raw -A PREROUTING -p tcp --dport 22 -j NOTRACK
null

Os comandos de exemplo desativam o rastreamento de conexão para todo o tráfego UDP e para o tráfego TCP na porta 22. Essas regras são exemplos. Configure-as de acordo com os requisitos e o ambiente específicos.

Referências