美文网首页
php-fpm进程利用CPU不均问题的优化过程

php-fpm进程利用CPU不均问题的优化过程

作者: 文档随手记 | 来源:发表于2018-01-26 12:24 被阅读0次

为了试验一下atlas用php准备构造一些数据,发现100个表总是一个表一个表的插入数据,然后发现另一个有意思的问题,就是CPU使用情况不是均匀的,请教运维后发现是php-fpm的亲和性问题。

让在一台四核服务器上采样分析一下数据确认一下是否存在负载不均衡问题:

shell > mpstat -P ALL 1 10

如上命令的含义是每秒运行一次 mpstat,一共采样 10 次,可以明显看出 CPU0 的空闲 idle 明显小于其它 CPUx,而且大部分都消耗在了用户态 usr 上面。

再让我们通过 pidstat 来确认一下是不是 PHP-FPM 导致的 CPU0 负载问题:

shell> pidstat | grep php-fpm | awk'{print $(NF-1)}' | sort | uniq -c

可见分配给 CPU0 的 PHP-FPM 进程比其他三个 CPUx 总和还要多。为什么大部分进程被分配给了 CPU0?我模模糊糊有一些印象是因为操作系统偏爱使用 CPU0,但我暂时也没找到理论上的根据,如果有人知道,麻烦告诉我。

问题总要解决,既然 PHP-FPM 没有类似 Nginx 那样 CPU 亲缘性绑定的指令,那么我们可以通过 taskset 手动绑定 PHP-FPM 进程到固定的 CPUx 来解决问题:

如上脚本运行后,让我们再来看看各个 CPU 负载分配情况如何:

shell > mp  stat -P ALL1 10

终于平均了,不过需要提醒的是,一旦 PHP-FPM 处理的请求数超过 max_requests 的设置,那么对应的进程将自动重启,先前的 taskset 设置也将失效,所以为了效果,我们可能需要把 taskset 脚本添加到 CRON 配置中去,例如每分钟自动设置一遍

不过运维告诉我,请求上去后服务器每个CPU的负载分布自动平衡了

相关文章

  • php-fpm进程利用CPU不均问题的优化过程

    为了试验一下atlas用php准备构造一些数据,发现100个表总是一个表一个表的插入数据,然后发现另一个有意思的问...

  • 为什么PHP选择多进程,而不是多线程

    PHP服务通过多进程来利用CPU多核,比如PHP-FPM就是一个C实现的多进程FastCGI服务。 主要有几点: ...

  • php-fpm

    php-fpm cpu 高排查思路 解决思路 解决思路 设置控制php-fpm进程池进程数量。 开启慢日志 编辑p...

  • Linux宝塔面板CPU占满100%,负载100%网站缓慢ngi

    PHP-FPM间歇性占用高CPU100% PHP-FPM进程CPU 100%的一些原因分析和解决方案及slow.l...

  • php-fpm优化方法

    php-fpm优化方法 php-fpm存在两种方式,一种是直接开启指定数量的php-fpm进程,不再增加或者减少;...

  • 多进程架构 child_process

    面对单进程单线程对多核使用不足的问题,理想状态下每个进程各自利用一个cpu,以此实现多核CPU的利用,nodejs...

  • CPU 性能优化思路

    应用程序优化 编译器优化 算法优化 异步处理 多线程代替多进程 善用缓存 系统优化 cpu绑定 cpu独占 优先级...

  • 2019-06-26

    CPU中断不均衡问题(网卡) 1、确认是否是网卡中断不均衡,导致某个CPU被打满。 cat /proc/inter...

  • 线上问题

    cpu100% 利用top工具找到最耗CPU的进程 查看该进程中最耗CPU的线程 通过jstack查找该线程 内存...

  • 记一次服务器cpu 100%

    附: php-fpm - 启动参数及重要配置详解 1、使用top命令 查看占用cpu高的进程 2、使用strace...

网友评论

      本文标题:php-fpm进程利用CPU不均问题的优化过程

      本文链接:https://www.haomeiwen.com/subject/kcwiaxtx.html