OpenVZ – TCP: time wait bucket table overflow

En servidores de producción, de alta carga de tráfico virtualizados con OpenVZ, podemos llegar a visualizar un error como este:

TCP: time wait bucket table overflow (CT249043)
printk: 7 messages suppressed.

Este error es sinónimo de problemas, problemas reales relacionados con el servicio que el container ofrece. Lo bueno es que es un error que podemos resolver, aún a costa de aumentar los recursos asignados a un determinado container.

Los síntomas son difíciles de apreciar, porque el servicio no deja de funcionar de repente sino que es más bien una degradación paulatina. Lo primero que hemos de hacer es un dmesg para ver que todo va bien

# dmesg

o

cat /var/log/messages

Por eso, lo segundo es repasar el user_beancounters en busca de fallos

/proc/user_beancounters

Si vemos fallos en kmemsize, lo cual será muy probable, ya tenemos más pistas sobre el problema de nuestro anfitrión (y containers). Necesitamos aumentar un valor concreto del sysctl.conf, el tcp_max_tw_buckets_ub. En anteriores versiones del kernel OpenVZ, tenía un valor por defecto muy bajo. Se aplicaron cambios y se subió ese valor pero en algunos entornos, de alto tráfico, puede ser insuficiente

# vim /etc/sysctl.conf

o

# echo 65536 > /proc/sys/net/ipv4/tcp_max_tw_buckets

o

# echo 65536 > /proc/sys/net/ipv4/tcp_max_tw_buckets_ub

donde tcp_max_tw_buckets_ub es el límite por VPS y tcp_max_tw_buckets es el límite global.
Podemos editar directamente el sysctl.conf o modificar el valor directamente sobre el parámetro en cuestión. Para aplicar los cambios

# sysctl -p

y para comprobar que, se han aplicado correctamente

# sysctl -a | grep tw

net.ipv4.tcp_max_tw_buckets_ub = 65536
net.ipv4.tcp_max_tw_kmem_fraction = 384
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_max_tw_buckets = 180000

Leave a Reply

Your email address will not be published. Required fields are marked *