Haproxy usando 10GB de memória e 100% de CPU com conexões de 50k

6

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?

    
por Nyxynyx 19.07.2014 / 23:30

2 respostas

3

A carga da CPU no HAProxy aumentará em 100 quando você sair das portas de origem e tentar procurar as disponíveis. Geralmente isso é 30kish embora. O que você tem para sysctl net.ipv4.ip_local_port_range ?

Por exemplo, se você tiver 30k conexões com um único servidor no back-end, provavelmente ficará sem portas de origem e atingirá o problema da CPU.

    
por 02.02.2015 / 17:42
2

Adicione a opção nbproc <number-of-cores> à configuração. Sem isso, o HAproxy é executado em um núcleo.

    
por 02.02.2015 / 17:15