解決伺服器 CPU 佔用 100% 導致 PHP-fpm 程式假死問題

tenacity發表於2018-10-17

公司專案需要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

相關文章