Em um servidor Ubuntu 14.04 x64, o Haproxy usa 3,3 GB de memória e 6,8 GB de swap, enquanto manipula conexões 52k. O uso da CPU também aumenta para 100% antes que a maior parte do tráfego seja redirecionada para outra caixa haproxy. O tráfego é principalmente conexões TCP persistentes.
pid = 3185 (process #1, nbproc = 1)
uptime = 0d 6h14m21s
system limits: memmax = unlimited; ulimit-n = 524341
maxsock = 524341; maxconn = 262144; maxpipes = 0
current conns = 54303; current pipes = 0/0
Running tasks: 1/54336
Percebeu-se que o uso da memória disparou tremendamente em torno de 50k conexões. ulimit -n
está definido como 1048576
.
Pergunta: A quantidade de uso de memória é incomumente alta? Como podemos reduzir o consumo de memória?
Eu também li o seguinte de outra pergunta, é relevante? Como devo verificar se as configurações TCP são suficientes (para conexões TCP persistentes) para não causar um grande aumento no uso de memória?
At 54000 concurrent connections, you should be careful about your TCP settings. If running with default settings (87kB read buffer, 16kB write buffer), you can end up eating 10 gigs of memory just for the sockets.
sysctl.conf
net.core.wmem_max=12582912
net.core.rmem_max=12582912
net.ipv4.tcp_rmem= 10240 87380 12582912
net.ipv4.tcp_wmem= 10240 87380 12582912
haproxy.conf
global
log /dev/log local0
log /dev/log local1 notice
maxconn 262144
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
option tcplog
option dontlognull
option redispatch
retries 3
maxconn 262144
contimeout 180000
clitimeout 180000
srvtimeout 180000
timeout contimeout 180000
timeout connect 180000
timeout client 180000
timeout server 180000
Atualizar
Reiniciando (não recarregando) o haproxy reduziu a carga da CPU para 30%. O que poderia ter causado a alta carga de CPU anteriormente?