服务器不时出现的CPU使用率超高、内存几乎被吃光的现象。top查看之,发现php-fpm进程高挂不下,于是根据Google总结如下方案:

一、检查PHP配置及代码

#找出CPU使用率高的进程PID
top
#查看进程的内存使用情况
pmap PID
#跟踪进程执行的系统操作
strace -p PID
#查看该进程在处理的文件
ll /proc/PID/fd

a.结合系统的内存大小,配置php-fpm的进程数(max_children)
b.将有可疑的PHP代码修改之,如:file_get_contents没有设置超时时间

二、启用php-fpm慢日志
本来不想加此方法,但是@phpsir提出了,我也放上来。
此日志是dump出脚本执行的过程到文本文件,相对比较直观,只是我感觉有时候找不到自己想要东西,可能还是不习惯这么用吧。大家可以尝试下。

三、强制结束高消耗进程

php-fpm 进程占用的内存超过 %5 就把它kill掉

#!/bin/sh
fpms=`ps aux | grep php-fpm | grep -v grep | awk '{if($3>=5)print $2}'`
for fpm in $fpms; do
  kill -9 $fpm
  echo `date +'%F %T'` $fpm >>/var/log/php5/kill.log
done

标签: php, shell, linux

已有 2 条评论

  1. 兄台, php-fpm 的配置文件slow.log 要用用,就不用猜了,直接就能看到

    1. 开启了的~,dump出来的数据很多不够完整,才这样跟踪进程的

添加新评论