SSH 登入 Linux 伺服器,30 秒完成健康檢查的標準指令組合:
uptime # 1/5/15 分鐘負載、運行天數、用戶數
# 負載 ≤ CPU 核心數 為健康;持續 > 2× 核心數需排查
free -h # 記憶體/Swap 使用量 (人類可讀)
# 記憶體 > 90% 且 Swap > 50% → 記憶體洩漏/不足
df -h # 檔案系統使用率
# 任一掛載點 > 90% → 清理日誌/暫存/舊備份
top -b -n 1 | head -20 # CPU/記憶體佔用前列進程
# 或 htop (互動式)、atop (歷史記錄)
ps -ef | grep httpd | wc -l
# 對比 MaxRequestWorkers 設定值,超過 80% → 擴容或調優
ss -ant | grep :80 | wc -l # TCP 80 埠連線數 (含 TIME_WAIT)
ss -s # TCP 連線狀態統計
tail -f /var/log/maillog # 即時追蹤郵件流向
mailq # 佇列郵件數量、大小、狀態
postqueue -p # 詳細佇列列表
# 啟動/重啟服務 (systemd)
systemctl start postfix
systemctl restart postfix
systemctl status postfix
# 環境變數 (建議寫入 /etc/profile.d/tomcat.sh)
export CATALINA_HOME=/opt/tomcat
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
# 日誌位置
$CATALINA_HOME/logs/catalina.out
$CATALINA_HOME/logs/localhost_access_log.YYYY-MM-DD.txt
# 優雅關閉 (等待現有請求完成)
$CATALINA_HOME/bin/shutdown.sh
# 強制終止 (shutdown 失效時)
pkill -f "org.apache.catalina.startup.Bootstrap"
# 或
kill -9 $(pgrep -f "org.apache.catalina.startup.Bootstrap")
# 啟動
$CATALINA_HOME/bin/startup.sh
# 重啟腳本 (生產環境建議)
#!/bin/bash
$CATALINA_HOME/bin/shutdown.sh
sleep 10
if pgrep -f "org.apache.catalina.startup.Bootstrap" > /dev/null; then
pkill -9 -f "org.apache.catalina.startup.Bootstrap"
fi
$CATALINA_HOME/bin/startup.sh
tail -f $CATALINA_HOME/logs/catalina.out
export CATALINA_OPTS="-Xms2g -Xmx4g \
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs/heapdump.hprof \
-Djava.security.egd=file:/dev/./urandom \
-Dfile.encoding=UTF-8 -Duser.timezone=Asia/Taipei"
#!/bin/bash
# healthcheck.sh
THRESHOLD_LOAD=2.0
THRESHOLD_MEM=90
THRESHOLD_DISK=90
THRESHOLD_TOMCAT_THREADS=600
LOAD=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//')
MEM=$(free | awk '/Mem:/ {printf "%.0f", $3/$2*100}')
DISK=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
TOMCAT_THREADS=$(ss -ant | grep :8080 | wc -l)
ALERTS=()
(( $(echo "$LOAD > $THRESHOLD_LOAD" | bc -l) )) && ALERTS+=("LOAD:$LOAD")
(( $MEM > $THRESHOLD_MEM )) && ALERTS+=("MEM:$MEM%")
(( $DISK > $THRESHOLD_DISK )) && ALERTS+=("DISK:$DISK%")
(( $TOMCAT_THREADS > $THRESHOLD_TOMCAT_THREADS )) && ALERTS+=("TC_THREADS:$TOMCAT_THREADS")
if [ ${#ALERTS[@]} -gt 0 ]; then
echo "$(date) ALERT: ${ALERTS[*]}" | mail -s "Server Health Alert" admin@example.com
fi
建立標準化指令庫與自動化監控,讓 Linux 維運從「救火」轉向「預防」。