一般情况下,PHP-CGI只在用户访问的时候会占用CPU资源,如果服务器上的PHP-CGI进程占用了非常多的CPU,但是访问流量却非常少。这显然是一个不正常的现象
1.使用 top 找出CPU最高的进程pid
2 ll /proc/PID/fd //通过PID找到哪个文件操作的进程,进而知道问题所在
3 strace -p PID(进程数) 来跟踪进程
Linux分析进程占用内存最高和占用CPU最高
这里只显示最高的前5个,如果想显示更多的话,可以自己修改:
查看占用内存最高的5个进程
ps aux | sort -k4nr | head -n 5
查看占用cpu最高的5个进程
ps aux | sort -k3nr | head -n 5
查看是否是硬件问题
方式:top 命令
主要查看:load average(平均负载),这是一个4核8G内存的服务器
1分钟平均负载:2.32;
5分钟平均负载:2.18;
15分钟平均负载:3.95;
load average 中3个数的含义,如果是1核cpu,那么不能超过1,4核那么就不能超过4,15分钟可以代表长期,5分钟代表中期,1分钟代表短期,所以先看15分钟
可以说它现在的平均负载接近了它的cpu总核数:4;需要考虑服务器配置升级!
php-fpm.conf 文件一般位于 /www/server/php/70/etc 目录下,注意 70 是php的版本号,需要根据你的php版本变更。
1 ---- 此文章是单个PHP进程使用CPU过高
公司服务器CPU占用过高,报警了,第一反应是登录服务器, top 命令查看当前进程,再输入 P 按cpu排序 :
果然看到有多个php-fmp进程占用cpu过高,都达到100%了
于是打算监听一下进程,看看在执行什么操作,使用 strace 命令:
#监听进程 strace -o /tmp/output.txt -T -tt -F -e trace=all -p 7757
#查看log tail -f /tmp/output.txt
结果还没看出来什么,cpu占用率已经下来了,那几个进程已经结束了。最后通过 php慢日志 发现了端倪。
php慢日志开启条件,需要在 php-fpm.conf 配置如下:
request_slowlog_timeout = 1 #脚本超时秒数,超过1稍都算慢了
slowlog = /var/log/php.log.slow #记录慢日志路径
查看近1000条php慢日志:
tail -n 1000 /var/log/php.log.slow
经查找发现了罪魁祸首,是前同事留下的一个大递归操作有问题:
然后优化代码就可以了。
这种个别php-fpm进程cpu占用过高,基本上是由于程序本身存在问题(如程序无限循环逻辑),优化程序后如果还得不到解决,那就如网上所说需要考虑 php-fpm.conf 里面的一些配置参数了,以及升级服务器。
此文: