记录一个多核CPU负载不均衡问题
来源:互联网 发布:android ndk r9d mac 编辑:程序博客网 时间:2024/05/19 14:37
在一台多核CPU的web服务器上,存在负载不均衡问题,其中,其中CPU0的负载明显高于其他CPUx,进一步调查表明PHP-FPM的嫌疑最大
让我们在一台四核服务器上采样分析一下数据确认看看是否存在负载不均衡问题:
shell> mpstat -P ALL 1 10CPU %usr %nice %sys %iowait %irq %soft ... %idleall 17.57 0.03 1.78 0.00 0.35 0.23 ... 80.04 0 43.17 0.00 4.12 0.00 1.41 1.00 ... 50.30 1 9.80 0.00 0.81 0.00 0.00 0.00 ... 89.39 2 9.31 0.00 1.20 0.00 0.00 0.00 ... 89.49 3 7.94 0.10 0.80 0.00 0.00 0.00 ... 91.16
如上命令的含义就是每秒一次mpstat,一共采样10次取平均值,可以明显看出CPU0的空闲idel明显小于其他CPUx,而且大部分消耗在user上面
再让我们通过pidstat来确认一下是不是PHP-FRM导致的CPU0负载问题:
shell> pidstat | grep php-fpm | awk '{print $(NF-1)}' | sort | uniq -c157 034 134 232 3
可见分配给CPU0的PHP-FPM进程比其他三个CPUx总和还要多,为什么大部分进程被分配给CPU0?可能是操作系统偏爱使用CPU0的原因,但是问题总要解决,既然PHP-FPM没有类似Nginx那么CPU亲缘性绑定的指令,那么我们可以使用taskset绑定PHP-FPM进程到固定的CPUx来解决问题:
#!/bin/bashCPUs=$(grep -c "processor" /proc/cpuinfo)PIDs=$(ps -aux|grep "php-fpm[:] pool"|awk 'print $2}')let i=0for PID in $PIDs;do CPU=$(echo "$i%$CPUs"|bc) let i++ taskset -pc $CPU $PIDdone
如上脚本运行后,我们再来看各个CPU负载分配情况:
shell> mpstat -P ALL 1 10CPU %usr %nice %sys %iowait %irq %soft ... %idleall 15.73 0.03 1.61 0.00 0.20 0.23 ... 82.20 0 16.28 0.10 1.62 0.10 0.81 0.91 ... 80.18 1 16.16 0.10 1.51 0.00 0.00 0.10 ... 82.13 2 14.46 0.10 1.71 0.00 0.00 0.00 ... 83.73 3 15.95 0.00 1.71 0.00 0.00 0.00 ... 82.35
终于平均了,不过需要提醒的是,一旦PHP-FPM处理请求数超过了max-requests的设置,那么对应的进程将自动重启,先前的taskset设置也将失效,所以为了一直有效,我们需要把taskset脚本添加到CRON配置中去,例如每分钟自动设置一遍
http://huoding.com/2016/07/19/528
0 0
- 记录一个多核CPU负载不均衡问题
- 多核CPU配合负载均衡可以这样用,为老板省点钱
- 多核CPU配合负载均衡可以这样用,为老板省点钱
- cpu负载均衡
- Java应用在多核服务器上压力不均衡问题
- 一个负载均衡问题的解决过程
- win10 下多核的负载均衡表现
- 负载均衡实战记录
- Nginx负载均衡记录
- 负载不均衡
- 负载均衡问题
- 负载均衡问题
- 负载均衡 session问题
- DNS负载均衡问题
- tomcat负载均衡问题
- HDFS负载均衡问题
- eigrp不等价负载均衡
- 负载均衡时,在State_Server模式中的Session共享问题(不讨论负载均衡的问题)
- Sublime:打造Go编辑器并配合使用terminal编译运行golang程序
- 直线,折线,曲线分割平面以及平面分割空间问题
- Android动态加载布局(fragment限定符的使用)
- Java开发控制台程序的输入输出
- C++与C语言的不同(一)
- 记录一个多核CPU负载不均衡问题
- git学习-历史回滚
- Android视频
- 【Android】56、动态加载布局的技巧——使用最小宽度限定符
- Unity3D-旧版AssetBundle相关API介绍
- Web综合应用实验(html css javascript)
- Web前端面试题目汇总
- 网络--路由器桥接
- Spring boot war包方式部署