首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Bash 守護進程腳本導致 CPU 飆升:缺少睡眠導致忙等待

     編輯:程式設計綜合問答

問題腳本

#!/bin/bash
while true; do
    process=$(ps -ef | grep /opt/tomcat7 | grep -v grep)
    if [ -z "$process" ]; then
        sleep 10
        nohup /opt/tomcat7/bin/catalina.sh start & > /tmp/1.txt
    fi
    # 缺少 sleep!進程存在時無限循環
done

原因

當 Tomcat 進程存在時,if 分支不執行,while 迴圈**無任何延遲**瘋狂執行 ps、grep、管道操作,佔滿 CPU。

修正版

#!/bin/bash
while true; do
    if ! pgrep -f /opt/tomcat7 >/dev/null; then
        sleep 10
        nohup /opt/tomcat7/bin/catalina.sh start &> /tmp/tomcat_start.log
    fi
    sleep 5  # 關鍵:每輪檢查間隔 5 秒
done

改進建議

  • 使用 pgrep 或 systemctl is-active 替代 ps | grep,效率更高。
  • 加入日誌輪轉,避免 /tmp/1.txt 無限增長。
  • 生產環境建議使用 systemd、supervisord 或 PM2 等進程管理器,而非手寫 Shell 守護。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved