ps 與 top:程序監控的完整攻略
在 Linux 系統管理與開發的日常工作中,了解系統正在執行哪些程序、它們佔用了多少資源,是進行除錯與效能优化的第一步。許多初學者往往在面對終端機時感到困惑,不知道該如何快速定位「吃記憶體」或「佔 CPU」的兇手。本文將深入解析 Linux 中最經典的兩個程序監控工具:ps 與 top,透過實際範例與選項解析,幫助你建立完整的程序監控知識體系。
ps:靜態快照的藝術
ps(Process Status)指令的主要功能是顯示當前系統中程序的即時狀態。與 top 的動態更新不同,ps 提供的是執行那一刻的「靜態快照」。這使得它非常適合用於腳本自動化處理或一次性查詢特定程序資訊。
基礎用法與常用選項
在 Ubuntu 22.04 或 Debian 12 環境中,我們最常使用 ps aux 來查看系統中所有的程序。
ps aux
這個組合選項的意義如下:
a:顯示所有使用者的程序(包含其他使用者)。u:以使用者為中心的格式輸出,顯示程序所屬的使用者、CPU 與記憶體佔用率等詳細資訊。x:顯示沒有控制終端機(TTY)的程序,例如背景服務或守護進程(Daemon)。
進階篩選與排序
當程序列表過長時,手動尋找目標非常困難。我們可以結合 grep 或 sort 來精準定位。例如,想要找出佔用 CPU 最高的前五個程序:
ps aux --sort=-%cpu | head -n 6
這裡使用了 --sort=-%cpu 選項,負號代表降冪排列。輸出結果會包含 USER、PID、%CPU、%MEM 等欄位,讓你一眼看出誰是資源消耗大戶。
若想查詢特定使用者的程序,例如 www-data(Nginx/Apache 常用帳號):
ps -u www-data
top:動態監控的利器
top 指令提供了一個動態的、實時更新的系統監控介面。它不僅顯示程序列表,還能即時反映系統的負載(Load Average)、記憶體使用情況以及交換空間(Swap)狀態。
啟動與基本操作
直接輸入 top 即可啟動:
top
啟動後,你會看到畫面分為幾個區塊:
- 頂部資訊區:顯示系統整體負載、運作時間、登入使用者數。
- 任務/程序區:列出所有程序,預設按 CPU 使用率排序。
- 記憶體與交換空間區:顯示物理記憶體與 Swap 的使用狀況。
互動式指令優化
在 top 執行期間,你可以按下以下按鍵來改變顯示行為,無需重新啟動程式:
P:按 CPU 使用率排序(預設)。M:按記憶體使用率排序。這對找出記憶體洩漏或高負載程序非常有效。c:切換顯示完整的路徑與指令參數。預設可能只顯示程序名稱,按下c後能看到啟動該程序時傳入的完整參數,對除錯極具幫助。k:發送訊號給特定程序(例如終止程序)。輸入 PID 後,通常選擇9(SIGKILL) 強制終止。q:退出 top。
非互動模式(批次模式)
有時我們需要將 top 的結果記錄到檔案中進行後續分析,或者在不支援互動終端機的環境中使用。這時可以使用 -b(批次模式)與 -n(更新次數)選項:
top -b -n 1 > top_report.txt
這行指令會執行一次 top 的快照並將其輸出導向 top_report.txt 檔案,適合用於定期記錄系統狀態的 cron job 腳本中。
常見問題 / 注意事項
-
Zombie 程序(殭屍程序)的處理: 在
ps輸出中,狀態為Z的程序稱為 Zombie。這些程序已經結束執行,但其父程序尚未讀取它的退出狀態。通常 Zombie 程序不會佔用 CPU 或記憶體資源,因此不需要特別「殺死」它。解決方法是終止或重啟其父程序,讓系統回收該程序的控制代碼。若發現大量 Zombie 程序,應檢查應用程式邏輯是否有誤。 -
權限與資訊完整性: 一般使用者執行
ps aux時,可能無法看到其他使用者的完整程序資訊(部分欄位會顯示為?或星號),這是 Linux 的隱私保護機制。若要查看系統所有程序的完整資訊,通常需要sudo權限。此外,top在監控高頻率更新的系統時,可能會因為頻繁讀取/proc檔案系統而產生輕微的系統負載,在極端效能敏感的環境下應謹慎使用。
小結
ps 與 top 是 Linux 程序監控的雙璧。ps 勝在精確與可腳本化,適合用於查詢特定時刻的狀態或自動化任務;而 top 則勝在動態與互動性,適合用於即時監控系統負載與除錯。掌握 ps aux --sort 與 top 中的 M、c 等互動按鍵,能大幅提升你排查系統問題的效率。建議在日常工作中交替使用這兩者,以獲得最全面的系統視角。