haproxy(七)多线程使用

现象

HAProxy绑定4核cpu、8核cpu、16核cpu,压测的时候,都会出现CPU 100%被使用的情况。

追查过程

1. 通过 mpstat  -P ALL 1 命令查看cpu 都用在哪里,可以看到cpu都绝大部分用在 sys态上。

haproxy(七)多线程使用_第1张图片

 

2. 通过 strace -p pid -c 查看HAProxy 进程那个系统调用占用cpu 最多,看到cpu 都用在了 connect系统调用上。

haproxy(七)多线程使用_第2张图片

 

3. HAProxy连接后端会使用connect系统调用,查看HAProxy配置,发现HAProxy连接后端就只有两个后端,即这种情况: vegeta(40台压测机器)-》HAProxy-》httptest(2台HAProxy后端),其中 HAProxy连接后端最多只能有63000个端口左右,大量的连接积压在HAProxy机器上,导致cpu被耗尽了。


多线程使用方法

nbproc
cpu-map <“all”|”odd”|”even”|process_num>

这2个配置是密切相关的,nbproc是指启动多少个haproxy进程。

#nbproc设置为4,讲启动4个进程
haproxy  11472  0.0  0.0  56520  1228 ?        Ss   08:57   0:00 ./haproxy -f /usr/local/haproxy/conf/haproxy.cfg
haproxy  11473  0.0  0.0  56520  1228 ?        Ss   08:57   0:00 ./haproxy -f /usr/local/haproxy/conf/haproxy.cfg
haproxy  11474  0.0  0.0  56520  1228 ?        Ss   08:57   0:00 ./haproxy -f /usr/local/haproxy/conf/haproxy.cfg
haproxy  11475  0.0  0.0  56520  1228 ?        Ss   08:57   0:00 ./haproxy -f /usr/local/haproxy/conf/haproxy.cfg

#查看pid文件,也可以看到四个进程ID
# cat /run/haproxy.pid 
11472
11473
11474
11475
cpu-map是将进程绑定到特定的CPU上,这个好处是防止多进程对CPU的抢占,可以提升少量性能。这个配置指令有2个参数,第一参数是进程序号,从1开始。第二个参数是CPU序号,从0开始。举例说明如果将进程绑定到指定的CPU上的。

#查看本机的CPU个数,同时也可以看到CPU的序号从0开始

# cat /proc/cpuinfo | grep processor
processor    : 0
processor    : 1
processor    : 2
processor    : 3
# 逐一指定
cpu-map 1 0
cpu-map 2 1
cpu-map 3 2
cpu-map 4 3
cpu-map 5 4 //该条超过nbproc的数量,将被忽略

#全部的进程由0号cpu处理。
cpu-map all 0

#奇数的进程有0号cpu处理,偶数的进程有1号cpu处理。
cpu-map odd 0
cpu-map even 1
后端绑定

frontend access_http
   bind 0.0.0.0:80
   bind-process 1
frontend access_https
   bind 0.0.0.0:443 ssl crt /etc/yourdomain.pem
   bind-process 2 3 4






你可能感兴趣的:(服务器)