「死機」指系統完全無響應(無法 SSH、Ping 不通、主控台無反應);「卡頓」指響應極慢、命令執行延遲高、負載飆升但尚可連線。兩者本質皆為資源耗盡或核心異常導致調度失效。
# 即時觀察
free -h
watch -n 1 'free -h && echo "---" && ps aux --sort=-%mem | head -20'
# 關鍵指標
# Mem Available < 10% 總量 → 高風險
# Swap 使用量持續增長 → 記憶體壓力大
# 單一進程 RSS 持續增長 → 疑似記憶體洩漏
ulimit -v、啟用 OOM Killer 白名單、定期重啟長運行服務
# 檢查系統級定時任務
cat /etc/crontab
ls -la /etc/cron.*/
cat /var/spool/cron/root # root 使用者任務
# 檢查使用者級任務
crontab -l -u www
crontab -l -u mysql
sleep $((RANDOM % 300))、使用 flock 防止並發| 服務 | 關鍵參數 | 風險閾值 | 調整建議 |
|---|---|---|---|
| Nginx | worker_connections | > 1024 * worker_processes | 依 CPU 核心數與記憶體設定 |
| Apache | MaxRequestWorkers | > 可用記憶體 / 單進程記憶體 | Prefork 模式需謹慎計算 |
| PHP-FPM | pm.max_children | > 總記憶體 / 平均進程記憶體 | 啟用動態模式 pm = dynamic |
| Tomcat | maxThreads | > 200 (預設) | 配合 AcceptCount、連接池大小 |
| MySQL | max_connections | > 151 (預設) | 監控 Threads_connected 峰值 |
# 總進程數
ps -eLf | wc -l
# 或
cat /proc/loadavg # 第 4 欄: running/total threads
# 殭屍進程
ps aux | awk '$8 ~ /^Z/ {print}'
# 或
ps -eo stat,pid,ppid,cmd | grep '^Z'
# 查找父進程
ps -o ppid= -p
wait()/waitpid() 回收子進程狀態
# 即時追蹤
tail -f /var/log/messages
tail -f /var/log/syslog
journalctl -f # systemd 系統
# 關鍵字搜尋
grep -i -E "oom|kill|error|fail|segfault|hardware|disk|memory|cpu" /var/log/messages
# 檢查壞軌
badblocks -v /dev/sda # 唯讀檢查,耗時較長
smartctl -a /dev/sda # S.M.A.R.T. 資訊(推薦)
# I/O 壓力觀察
iostat -x 1 10
iotop -o # 僅顯示有 I/O 的進程
%util 接近 100%、await > 100ms、svctm 異常高
# 查看核心執行緒
ps -eo pid,comm,cmd | grep -E '^\[.*\]$'
# 軟中斷佔用高
cat /proc/softirqs
watch -n 1 'cat /proc/softirqs'
# 網卡多隊列、RPS/RFS 調優
ethtool -L eth0 combined 8
# 完整進程樹
ps -ef --forest
pstree -p
# 可疑特徵
# 異常使用者執行進程
# 異常網路連線 (netstat -antup / ss -antup)
# 高 CPU 進程名稱隨機、路徑在 /tmp、/dev/shm
# 近期修改的二進制檔 (find / -type f -mtime -1 -perm /111 2>/dev/null)
cp /proc//exe /tmp/suspicious_bin 、netstat -antup > /tmp/netstat.logsosreport、dmesg -T、journalctl --since "1 hour ago"kdump 獲取核心崩潰轉儲