Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 系統監控實戰:用 ps、top、mpstat 精準定位 CPU 與 I/O 瓶頸

編輯:關於 Linux

面對 Java 進程 CPU 飆高或 I/O 等待過久,如何快速定位到具體程式碼行?本文實戰演示 ps、top、mpstat 三大監控指令的組合拳,從進程到線程,再到 JVM 堆棧,層層剝洋蔥找出效能瓶頸根因。

ps 指令輸出範例

場景一:找出最佔 CPU 的 Java 線程

步驟 1:獲取進程下所有線程 CPU 佔用

ps -mp  -o THREAD,tid,time
# 或
ps -Lfp 

關鍵欄位:TID (線程 ID)、TIME (佔用 CPU 時間)。找出 TIME 最大的 TID,例如 30834。

步驟 2:將 TID 轉為十六進制

printf "%x\n" 30834
# 輸出如 789b

步驟 3:導出 JVM 堆棧並匹配

jstack  > jstack.log
grep -i 789b jstack.log

即可定位到對應的 Java 線程堆棧,直達問題程式碼區塊。

jstack 輸出範例

堆棧關鍵字段解讀

  • nid=0x7d9b:對應 Linux 系統的線程 ID (即十六進制 TID)
  • tid=0x00002aab047a9800:JVM 內部記憶體地址,進階記憶體分析用
  • daemon prio=10:守護線程、優先級
  • waiting on condition:線程狀態 (等待、運行、阻塞等)

場景二:即時追蹤進程內線程 CPU 佔用

若需動態觀察,使用 top 的線程模式:

top -Hp 

畫面會即時刷新各線程 CPU%、記憶體佔用,配合上述 jstack 分析流程同樣適用。

top -Hp 輸出範例

場景三:判斷 I/O 瓶頸

mpstat 觀察 CPU 等待 I/O 比例

mpstat -P ALL 1 1000

重點關注 %iowait 欄位:

  • %iowait 持續偏高 (如 > 20-30%),通常意味著磁碟 I/O 成為瓶頸。
  • 結合 iostat -x 1、pidstat -d 1 進一步定位具備裝置與進程。

mpstat 輸出範例

總結:監控分析標準流程

  1. top/htop 確認整體 CPU、負載、記憶體狀態
  2. ps -Lfp PID 或 top -Hp PID 定位高佔用線程 TID
  3. printf "%x" TID 轉十六進制
  4. jstack PID | grep 十六進制TID 定位 Java 程式碼
  5. mpstat/iostat 輔助判斷 I/O 壓力

掌握這套「進程→線程→堆棧」鏈路,配合 JVM 參數調優、程式碼優化、資料庫索引優化,即可系統性解決 Linux 伺服器效能疑難雜症。

Copyright © Windows教程網 All Rights Reserved