解决服务器 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

取消监测任务

  1. 查看任务 (jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
    jobs -l

或者 ps aux | grep checkCpu

a:显示所有程序
u:以用户为主的格式来显示
x:显示所有程序,不以终端机来区分

或者 ps -ef | grep checkCpu

  1. 终止后台进程
    kill -9 进程号
本作品采用《CC 协议》,转载必须注明作者和本文链接
liugu
tenacity
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5

在线预览这个服务部署在单独的服务器上吗

5年前 评论
tenacity

@lovecn 没有哦,公司比较抠门,不愿意添加服务器,我觉得单独部一个window服务器专门做word转pdf应该挺好的 ,使用 openOffice 转换 有的文档给转的乱七八糟,不能完美转换

5年前 评论

1 自己解决,买台 win 服务器,调用 微软 office 的接口。
2 直接买一套,有现成的 卖的方案: idocv.com

5年前 评论
no_sign

phpword或者com扩展都可以把文档转成html,转成了html形式可以直接在页面上展示

4年前 评论

挖个坟,遇到同样的问题在libreoffice论坛上找到答案了
bbs.libreofficechina.org/forum.php...

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!