在真實生產環境(Production)中,伺服器偶爾會遇到網站回應變慢、記憶體不足(OOM, Out of Memory),甚至是 CPU 100% 被佔滿的情況。
這時候不能只靠「重啟伺服器」來解決問題。需要透過 Linux 內建的進程(Process)監控工具,精準找出是哪一個程式出現問題,並決定要怎麼處理。
Linux 進程排查四大指令
在 Linux 中,任何正在執行的程式、服務或腳本都會被分配一個獨立的 PID (Process ID)。我們主要透過以下四個指令來觀察與管理它們:
| 指令 | 英文全稱 / 概念 | 適用情境與特色 | 實務維運常用命令與範例 |
|---|---|---|---|
| ps | Process Status | 查看當下瞬間的進程快照(Static)。 | ps aux(查看系統所有進程)ps aux |
| top | Table Of Processes | 動態即時監控 CPU、Memory 使用率與進程列表(預設 3 秒更新)。 | 按 P 鍵依 CPU 排序、按 M 鍵依記憶體排序、按 q 離開 |
| htop | Highly Top | top 的彩色進階版。支援滑鼠操作與直觀的資源條狀圖(需另外安裝)。 | sudo apt update && sudo apt install -y htop輸入 htop 直接開啟 |
| kill | Kill Process | 傳送訊號(Signal)給指定 PID 以終止進程。 | kill (正常關閉 SIGTERM)kill -9 (強制殺死 SIGKILL) |
ps aux 輸出的關鍵欄位解析
執行 ps aux 時會印出非常詳細的欄位,維運排查時請重點觀察這幾欄:
USER:執行該進程的使用者帳號(如 root、ubuntu 或 www-data)。
PID:進程的唯一編號(要刪除進程時必須指定此編號)。
%CPU:該進程當前佔用的 CPU 資源百分比。
%MEM:該進程當前佔用的記憶體百分比。
STAT:進程狀態(例如 R 代表 Running 運作中、S 代表 Sleeping 休眠中、Z 代表 Zombie 殭屍進程)。
COMMAND:啟動該進程的原始指令或程式路徑。
記憶體與磁碟空間快速診斷指令
除了進程之外,資源排查還常搭配以下兩個輕量級指令:
free -h:快速查看當前記憶體(RAM)與 Swap 的總量、已用量與剩餘量(-h 表示以 MB/GB 的 Human-readable 格式呈現)。
df -h:查看各磁碟區塊(Disk Filesystem)的容量使用率,防止硬碟空間被 Log 塞爆。
下圖為在 Multipass 虛擬機(ubuntu@my-linux)中,實際驗證系統資源檢視、背景進程建立、PID 搜尋與終止進程(kill)的完整過程:
操作流程:
1.系統資源與磁碟空間健康檢查:
執行 free -h:查看記憶體剩餘狀況(目前記憶體使用 326MB,還有 616MB 可用空間)。
執行 df -h:確認根目錄 / 磁碟空間使用率為 65%(使用了 2.5G,尚有 1.4G),系統運作空間相當健康。
2.在背景建立測試進程:
執行 sleep 300 & 在背景開啟一個暫停 300 秒的測試程序,系統回傳作業代碼與 PID [1] 1769。
3.精準搜尋進程與 PID:
執行 ps aux | grep "sleep",在第二欄精準定位出 sleep 300 的 PID 為 1769。
4.終止進程(Kill Process):
執行 kill 1769 送出訊號關閉該程式,畫面顯示 [1]+ Terminated sleep 300,代表成功告知該進程終止運作。
5.二次驗證結果:
再次執行 ps aux | grep "sleep",此時結果只剩下 grep 指令本身,證實 PID 1769 的進程已經被徹底清理完畢。