Esgotado por erros “TCP: tempo excedido na tabela de espera do balde” - O que posso fazer para mitigar?

1

Eu tenho um sistema legado rodando Debian 7 (proxmox) hospedando contêineres OpenVZ, e estou vendo um problema problemático onde o sistema está sendo sobrecarregado por conexões abertas para o contêiner VZ executando o front end do apache.

Quando isso ocorre, o log no servidor é preenchido com milhares de erros "TCP: espera de excesso de tabela de intervalo de tempo (CT233)". Isso é combinado com respostas lentas do servidor da web. Existe alguma coisa que eu possa fazer para mitigar esse problema?

Depois de pesquisar, fiz alguns ajustes em várias configurações, mas tenho relutado em fazer algo radical demais sem entender melhor quais seriam as repercussões (ou, na verdade, se isso era realmente provável). ser útil em qualquer caso)

Para ter uma idéia de qual é a situação, aqui está a saída de "sysctl -a | grep conntrack" quando isso estava acontecendo hoje:

net.netfilter.nf_conntrack_generic_timeout = 480
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 345600
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
net.netfilter.nf_conntrack_tcp_loose = 1
net.netfilter.nf_conntrack_tcp_be_liberal = 0
net.netfilter.nf_conntrack_tcp_max_retrans = 3
net.netfilter.nf_conntrack_udp_timeout = 30
net.netfilter.nf_conntrack_udp_timeout_stream = 180
net.netfilter.nf_conntrack_icmp_timeout = 30
net.netfilter.nf_conntrack_acct = 0
net.netfilter.nf_conntrack_events = 1
net.netfilter.nf_conntrack_events_retry_timeout = 15
net.netfilter.nf_conntrack_max = 131072
net.netfilter.nf_conntrack_count = 128397
net.netfilter.nf_conntrack_buckets = 32768
net.netfilter.nf_conntrack_checksum = 1
net.netfilter.nf_conntrack_log_invalid = 0
net.netfilter.nf_conntrack_expect_max = 256
net.nf_conntrack_max = 131072

Isso inclui algumas alterações que fiz hoje: eu dobrei nf_conntrack_buckets de 16384 para 32768, eu reduzi o conntrack_generic_timeout de 600s para 480s, e reduzi conntrack_tcp_timeout_established de 5d para 4d.

A grande maioria das conexões abertas em um determinado momento está em TIME_WAIT.

Espero que haja algo que alguém com mais conhecimento sobre ajuste TCP / Kernel possa recomendar.

Obrigado!

    
por Ross Messiah 19.10.2016 / 16:32

1 resposta

0

Acabei ajustando duas outras variáveis, dobrando cada uma delas: "net.ipv4.tcp_max_tw_buckets" e "net.ipv4.tcp_max_tw_buckets_ub", e desde que essas alterações foram feitas, os erros "estouro da tabela de intervalo de espera de tempo" não foram alterados novamente. No entanto, vou ficar de olho durante a próxima semana, e ver se isso realmente resolveu o problema.

    
por 26.10.2016 / 11:03