在Ubuntu 14.04 x64服务器上,Haproxy使用3.3 GB内存和6.8 GB交换,同时处理52k连接。 在大多数stream量被redirect到另一个haproxy框之前,CPU使用率也保持在100%。 stream量主要是连接的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 。
问题:内存使用量是否exception高? 我们如何减less内存消耗?
我还从另一个问题读了下面的内容,是否相关? 我应该如何检查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>选项添加到configuration中。 没有这个HAproxy运行在一个核心上。