Ubuntu 14.04 x64サーバーでは、Haproxyは3.3 GBのメモリと6.8 GBのスワップを使用し、52k接続を処理します。また、CPU使用率は、ほとんどのトラフィックが別のhaproxyボックスにリダイレクトされる前に100%に急上昇し続けます。トラフィックは主に永続的ですTCP接続。
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
メモリー使用量が約50kの接続で途方もなく急増していることがわかりました。 ulimit -n
に設定されています 1048576
。
質問:メモリ使用量が異常に多いですか?どうすればメモリ消費を削減できますか?
私はまた別の質問から以下を読みました、それは関連がありますか? TCP設定が十分である(永続的なTCP接続の場合)ため)ことを確認して、メモリ使用量が大幅に増加しないようにするにはどうすればよいですか?
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
Haproxyを(リロードではなく)再起動すると、CPU負荷が30%に低下しました。以前はCPU負荷が高かったのはなぜですか?
ソースポートが不足し、利用可能なポートをスキャンしようとすると、HAProxyのCPU負荷が100に急上昇します。通常それは30kishです。 sysctl net.ipv4.ip_local_port_range
?
したがって、たとえば、バックエンドの単一サーバーへの接続が30kの場合、ソースポートが不足し、CPUの問題が発生する可能性があります。
追加 nbproc <number-of-cores>
オプションを設定に追加します。このHAproxyがなければ、1つのコアで実行されます。