解决服务器 CPU 占用 100% 导致 PHP-fpm 进程假死问题
公司项目需要word文档在线预览功能,于是各种百度谷歌,找到一个解决方案,使用openOffice或者liberOffice 将word转换成pdf预览,但是可能openoffice 比较坑,有点bug 导致服务器CPU总是被soffice.bin 这玩意占用100%以上,进而导致 php-fpm无响应 ,所以想到这个简单粗暴的方法暂时搞一下(并没与完全解决问题,不知道哪位大神有好的word预览方案)
具体就是监控这个进程 一旦 cpu 占用超过95 就干掉它... (简单粗暴,但很有效果哈)
新建个文件
touch checkCpu
编辑
vi checkCpu
#!/bin/bash
record=0
while true;
do
cpu=$(top -b -n1 | grep "soffice.bin" | head -1 | awk '{print $9}')
pid=$(top -b -n1 | grep "soffice.bin" | head -1 | awk '{print $1}')
#cpu check
result=${cpu/.*}
if [[ $record == $pid ]];then kill -9 $pid;echo "$pid was killed";fi
if [[ $result > 95 || $result == 100 ]];then
let record=${pid};
echo `date +%F" "%H:%M:%S`+" cpu:$result% record pid:$record pid:$pid"
else
let record=0;
fi
#echo
#echo `date +%F" "%H:%M:%S`+" cpu:$result% record pid:$record pid:$pid"
sleep 30
done
权限
chmod 777 checkCpu
后台运行
nohup bash ./checkCpu
取消监测任务
- 查看任务 (jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
jobs -l
或者 ps aux | grep checkCpu
a:显示所有程序
u:以用户为主的格式来显示
x:显示所有程序,不以终端机来区分
或者 ps -ef | grep checkCpu
- 终止后台进程
kill -9 进程号
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: