为了试验一下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的负载分布自动平衡了

作者:笨尛孩你谁啊
链接:https://www.jianshu.com/p/c78a6be69dff
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

  1. MAT之GA:利用GA对一元函数进行优化过程,求x∈(0,10)中y的最大值

    MAT之GA:利用GA对一元函数进行优化过程,求x∈(0,10)中y的最大值 目录 输出结果 代码设计 输出结果 代码设计 x = 0:0.01:10; y = x + 10*sin(5*x)+7*c ...

  2. 利用Linux的/proc/stat获取指定进程的cpu占有率及内存

    利用Linux的 /proc/stat计算进程的cpu占有率和内存 计算的是进程多个cpu的平均占有率,并不是每个cpu的,所以和top命令中的不一样 getinfo.cpp 1 #include&l ...

  3. taskset 查询或设置进程绑定CPU(亲和性)

    前言 taskset命令用于设置进程(或 线程)的处理器亲和性(Processor Affinity),可以将进程(或 线程)绑定到特定的一个 或 多个CPU上去执行,而不允许将进程(或 线程)调度到 ...

  4. 【Linux】限制进程的CPU使用率

    目录 限制进程CPU使用率 限制进程资源的工具 限制进程CPU使用率 工具  cpulimit 安装 1. cpulimit安装 1.1 Ubuntu/Debian: # apt-get instal ...

  5. 优化命令之vmstat——监控虚拟内存、进程、cpu

    目录 一:vmstat概述 1.1物理内存和虚拟内存 1.2虚拟内存原理 二:vmstat命令 2.1vmstat格式 2.2vmstat参数 三:案例 3.1显示虚拟内存使用情况 3.2一秒内显示2 ...

  6. 如何高效的利用CPU缓存

    CPU缓存 我们知道CPU的缓存一般是由三级缓存构成,缓存离CPU越近,CPU访问缓存的速度就越快.如下图所示,每个核心都有自己的一.二级缓存,但三级缓存却是一颗 CPU 上所有核心共享的:程序执行时 ...

  7. 服务器(Linux)挖矿木马病毒(kswapd0进程使cpu爆满)

    服务器(Linux)挖矿木马病毒(kswapd0进程使cpu爆满) 前言:由于本人的阿里云服务器遭受攻击,被挖矿,导致CUP爆满,同时受到阿里云官方的邮箱.短信以及电话通知(监管部门是不允许服务器被直 ...

  8. 生产环境下JAVA进程高CPU占用故障排查

    感谢原作者 http://blog.chinaunix.net/uid-10449864-id-3463151.html 问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常 ...

  9. c# 获取所有的进程的cpu使用率_Linux CPU使用率很高,但为啥却找不到高CPU的进程

    案例分析 你的准备 今天依旧探究系统CPU使⽤率⾼的情况,所以这次实验的准备⼯作,与上节课的准备⼯作基本相同,差别在于案例所⽤的Docker 镜像不同. 本次还是基于 Ubuntu 18.04,同样适 ...

最新文章

  1. 1-4月份我国软件业务收入15753亿元 同比增长13.1%
  2. 【原】网页程序学习Linux利器-----jsuix
  3. php队列会停止执行吗,php – Laravel Artisan CLI安全地停止守护程序队列工作者
  4. 通过服务器端日志分析WebSocket的server和client交互
  5. centOS 搭建pipelineDB docs
  6. vim的几个常用操作
  7. 【clion】实现类似自定义代码自动补全的功能(懒人利器)
  8. 【Android驱动】高通串口驱动,串口驱动中的msm_serial.c
  9. 斑马打印机设置成网络打印机步骤
  10. UDS 安全认证29服务概述
  11. 佛蒙特大学计算机排名,佛蒙特大学计算机科学与信息系统本科入学要求.pdf
  12. TypeWriter: Neural Type Prediction with Search-based Validation基于搜索的神经网络预测器
  13. 通过SendGrid进行邮件的发送【Java】
  14. 给SwipeRefreshLayout添加上拉加载更多功能
  15. 10-123 A3-3查找产品表中最低的单价
  16. android图片特效处理之锐化效果
  17. Elasticsearch API接口介绍
  18. 用python循环结构计算派的值_Python程序设计实验报告四:循环结构程序设计(设计型实验)...
  19. 使用BigInteger.setBit与BigInteger.testBit来实现权限控制
  20. 网络安全及网络安全评估的脆弱性分析

热门文章

  1. C#实现DataTable按天分组并计数
  2. JS:正则表达式详细语法基础
  3. 重载(Overload)和重写(Overide)
  4. qt 等待线程结束_实战PyQt5: 128-使用多线程进行并行处理
  5. centos 删除crontab_Centos7 利用crontab定时执行任务及配置方法
  6. 在windows server 2008 R2上运行disk cleanup
  7. angularjs-控制form及radio,checkbox,select
  8. netperf使用指南
  9. Java输出特定时间段特定格式时间信息
  10. Linux系统中硬盘的管理