haproxy(七)多线程使用
现象
HAProxy绑定4核cpu、8核cpu、16核cpu,压测的时候,都会出现CPU 100%被使用的情况。
追查过程
1. 通过 mpstat -P ALL 1 命令查看cpu 都用在哪里,可以看到cpu都绝大部分用在 sys态上。
2. 通过 strace -p pid -c 查看HAProxy 进程那个系统调用占用cpu 最多,看到cpu 都用在了 connect系统调用上。
3. HAProxy连接后端会使用connect系统调用,查看HAProxy配置,发现HAProxy连接后端就只有两个后端,即这种情况: vegeta(40台压测机器)-》HAProxy-》httptest(2台HAProxy后端),其中 HAProxy连接后端最多只能有63000个端口左右,大量的连接积压在HAProxy机器上,导致cpu被耗尽了。
多线程使用方法
nbproc <number>
cpu-map <“all”|”odd”|”even”|process_num> <cpu-set>…
这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个数,同时也可以看到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
现象
HAProxy绑定4核cpu、8核cpu、16核cpu,压测的时候,都会出现CPU 100%被使用的情况。
追查过程
1. 通过 mpstat -P ALL 1 命令查看cpu 都用在哪里,可以看到cpu都绝大部分用在 sys态上。
2. 通过 strace -p pid -c 查看HAProxy 进程那个系统调用占用cpu 最多,看到cpu 都用在了 connect系统调用上。
3. HAProxy连接后端会使用connect系统调用,查看HAProxy配置,发现HAProxy连接后端就只有两个后端,即这种情况: vegeta(40台压测机器)-》HAProxy-》httptest(2台HAProxy后端),其中 HAProxy连接后端最多只能有63000个端口左右,大量的连接积压在HAProxy机器上,导致cpu被耗尽了。
多线程使用方法
nbproc <number>
cpu-map <“all”|”odd”|”even”|process_num> <cpu-set>…
这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个数,同时也可以看到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