发现

如何发现的呢?当然是使用top命令,发现系统的load average>3,这说明系统已经处于比较高的负载中。

尝试解决

当我把php-fpm重启后,没过一会儿又开始cpu狂飙!这是什么鬼?

开始排查

首先,我们开启在php-fmp.conf中开启错误日志,慢执行日志还有常规日志

error_log = /var/log/php/error.log

access.log = /var/log/php/access.$pool.log

access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %{system}C%%"

slowlog = /var/log/php/slow.$pool.log

request_slowlog_timeout = 3s

重启php-fpm后我们开始监视日志

# 查看慢执行日志

[15-May-2015 12:50:22] [pool www] pid 1819

script_filename = /home/ftp/phpergao/wwwroot/index.php

[0x00007f2d286c2790] replace() /home/ftp/phpergao/wwwroot/usr/plugins/CdnHelper/Plugin.php:72

[0x00007fff78ab00f0] replace() unknown:0

[0x00007f2d286c2420] call_user_func_array() /home/ftp/phpergao/wwwroot/var/Typecho/Plugin.php:489

[0x00007fff78ab0430] __call() unknown:0

[0x00007f2d286c1f78] contentEx() /home/ftp/phpergao/wwwroot/var/Widget/Abstract/Contents.php:141

[0x00007f2d286c1b78] ___content() /home/ftp/phpergao/wwwroot/var/Typecho/Widget.php:385

[0x00007fff78ab0850] __get() unknown:0

[0x00007f2d286c1870] content() /home/ftp/phpergao/wwwroot/var/Widget/Abstract/Contents.php:783

[0x00007f2d286c1628] content() /home/ftp/phpergao/wwwroot/var/Widget/Archive.php:1401

[0x00007f2d286c14d0] content() /home/ftp/phpergao/wwwroot/usr/themes/just/index.php:32

[0x00007f2d286c10f8] +++ dump failed

[15-May-2015 19:18:48] [pool www] pid 5597

script_filename = /home/ftp/phpergao/wwwroot/index.php

[0x00007ff17fcf0168] __call() /home/ftp/phpergao/wwwroot/var/Typecho/Plugin.php:483

[0x00007fff915493c0] __call() unknown:0

[0x00007ff17fcefca8] ___title() /home/ftp/phpergao/wwwroot/var/Typecho/Widget.php:387

[0x00007fff915497e0] __get() unknown:0

[0x00007ff17fcef960] title() /home/ftp/phpergao/wwwroot/var/Widget/Abstract/Contents.php:809

[0x00007ff17fcef6d0] title() /home/ftp/phpergao/wwwroot/usr/themes/just/index.php:23

[0x00007ff17fcef2f8] +++ dump failed

其中contentEx引起了我的注意,这个方法是一个钩子,系统在获取到文章内容后执行,老高的有几个插件都挂载在此,突然就有想法了。

于是立即暂停有关的插件,过一阵负载变为load average: 0.39, 0.29, 0.42。

记录程序运行细节

记录程序运行时间

$start = microtime(true);

//index.php

$end = microtime(true);

$time = number_format(($end - $start), 2);

echo 'This page loaded in ', $time, ' seconds';

?>

跟踪php的系统调用

老高使用strace查看php主进程以及fork出的子进程的系统调用,并输出到/tmp/output.txt

strace -o /tmp/output.txt -T -tt -F -e trace=all -p 31920

将输出的文件用scp拷贝到本地电脑上,经过分析,并发+插件几乎拖死了CPU。

结论

某些数据的展示与否最好把性能也考虑上

正则的效率不高,能不用尽量不用

主题中如果同一个变量要使用多次,请将其先保存至一个临时变量

缓存很重要

strace是个好工具

sql卡住php-fpm会cpu大涨,排查PHP-FPM占用CPU过高相关推荐

  1. mysql数据库cpu使用情况查询_数据库占用cpu较高的查询

    近来看到别人的有关数据库查询cpu占用较高的sql语句(本人sql并不好),所以查询了一下资料,记录一下,便于理解和应用. 首先,将语句贴在这里 SELECT TOP 10 --平均cpu时间 tot ...

  2. php.exe占用资源过大,记录一次php占用系统资源过高的问题

    本地环境:redhat6.7系统. nginx1.12.1 ,php7.1.0,  代码使用yii2框架 问题:本地的web站需要用到elasticsearch服务.当php使用本地服务器搭建的ela ...

  3. CPU占用内存率高的几种可能以及解决方法

    CPU占用内存率高的几种可能以及解决方法 CPU占用率高的九种可能 1.防杀毒软件造成故障 由于新版的KV.金山.瑞星都加入了对网页.插件.邮件的随机监控,无疑增大了系统负担.处理方式:基本上没有合理 ...

  4. linux查找postgre进程,postgresql数据库某一个进程占用大量CPU,问题排查详解

    postgresql某一个进程占用大量 CPU,问题排查,目前服务器cpu为4核,内存8G 1.查下是不是我们的业务SQL SELECT procpid, START, now() - START A ...

  5. 趣味编程故事|java进程占用cpu过高怎么办,别急我来帮你

    关注公众号"AI码师"领取2021最新面试资料一份 [主演] 运维小哥:小李 测试小姐姐:小红 开发人员:本色出演 [剧情] 在一个阳光明媚的清晨,原本还在睡梦中的我,被小李(运维 ...

  6. linux cpu 使用10个进程,linux下获取占用CPU资源最多的10个进程

    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合: ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用 ...

  7. win10更新后,wsappx占用高内存/资源管理器占用CPU高

    目录 问题记录: 搜索与实践 最终解决办法 - 系统还原 新问题:设置搜索不能用 问题记录: 2022.7.26晚,没注意点击了"关机并更新"(有个intel驱动更新,不确定是否是 ...

  8. cpu缓冲区大小怎么设置_linux中cpu、内存、磁盘使用情况检查及处理

    第一部分:查看cpu使用情况 1.查看物理cpu个数 grep 'physical id' /proc/cpuinfo 2.查看cpu核心数 grep 'core id' /proc/cpuinfo ...

  9. MySQL page cleaner占用CPU较高问题

    在我们这里, 使用了复制和MGR两种架构集群, 为了更好地监控延迟, DBA开发了一个python脚本, 脚本从CMDB获取所有集群ProxySQL节点, 连接ProxySQL, 每秒更新 dbms_ ...

最新文章

  1. pandas获取dataframe数据列的数据类型、获取dataframe每类数据类型数据列的个数、使用select_dtypes函数、include参数以及exclude参数按照数据类型筛选数据
  2. Spring Boot 核心配置文件详解
  3. OWC组件生成柱状图
  4. android Q gradle配置,【Android】Android Studio启动配置gradle
  5. qt如何捕获应用程序输出_企业应用程序中需要捕获的5大Java性能指标
  6. 在Linux终端下调用可执行文件时总要加上符号./的原因
  7. 使用LINQ遇到的问题,请高手解答下原理
  8. mybatis学习笔记--常见的错误
  9. sharepoint获取当前网址
  10. python装饰器-简易版
  11. vbs 窗体文字获取文档_MDI类型窗体设置背景图片
  12. 调用新浪微博显示用户信息
  13. 电脑硬盘坏道怎么检测,又如何修复图文教程
  14. 修改后的LOGO发布(确定稿)
  15. python网络安全宣传周_基于Python的IA分布式系统_吴芳
  16. 超强数据恢复软件【含注册码】
  17. 合理使用AutoHotKey+StrokeIt
  18. 服务器虚拟化 lpar,HMC与VIOS对新LPAR提供存储与网络虚拟化的支持
  19. 自定义Navigationbar,使用Catagory
  20. android多边形图片,android – 按多边形区域裁剪图像

热门文章

  1. java开发web使用struts2,springMVC和spring,Jquery的理由?
  2. 学习C++的第一本书
  3. 深入理解全局编录服务器GC
  4. 自己动手,开发项目辅助工具
  5. [ARC061E]すぬけ君の地下鉄旅行 / Snuke's Subway Trip
  6. find_package()的查找*.cmake的顺序
  7. 深入浅出TensorFlow(二):TensorFlow解决MNIST问题入门
  8. linux学习-使用DHCP动态管理主机地址
  9. 手把手教会你模拟退火算法
  10. Oracle表空间基础(4)