cpustat:在 Linux 下根據運行的進程監控 CPU 使用率
推薦閱讀: 監控 Linux 性能的 20 個命令行工具
cpustat 能用兩種方式輸出數據:定時匯總的純文本列表和每個取樣的彩色滾動面板。
如何在 Linux 中安裝 cpustat
為了使用 cpustat,你的 Linux 系統中必須安裝有 Go 語言(GoLang),如果你還沒有安裝它,點擊下面的鏈接逐步安裝 GoLang:
安裝完 Go 以後,輸入下面的 go get
命令安裝 cpustat,這個命令會將 cpustat 二進位文件安裝到你的 GOBIN
變數(所指的路徑):
# go get github.com/uber-common/cpustat
如何在 Linux 中使用 cpustat
安裝過程完成後,如果你不是以 root 用戶控制系統,像下面這樣使用 sudo 命令獲取 root 許可權運行 cpustat,否則會出現下面顯示的錯誤信息:
$ $GOBIN/cpustat
This program uses the netlink taskstats interface, so it must be run as root.
注意:想要像你系統中已經安裝的其它 Go 程序那樣運行 cpustat,你需要把 GOBIN
變數添加到 PATH
環境變數。打開下面的鏈接學習如何在 Linux 中設置 PATH
變數。
cpustat 是這樣工作的:在每個時間間隔查詢 /proc
目錄獲取當前進程 ID 列表,然後:
- 對於每個 PID,讀取
/proc/pid/stat
,然後計算和前一個樣本的差別。 - 如果是一個新的 PID,讀取
/proc/pid/cmdline
。 - 對於每個 PID,發送
netlink
消息獲取taskstat
,計算和前一個樣本的差別。 - 讀取
/proc/stat
獲取總的系統統計信息。
根據獲取所有這些統計信息所花費的時間,會調整每個休息間隔。另外,通過每次取樣之間實際經過的時間,每個樣本也會記錄它用於測量的時間。這可用於計算 cpustat 自身的延遲。
當不帶任何參數運行時,cpustat 默認會顯示以下信息:樣本間隔:200ms;匯總間隔:2s(10 個樣本);顯示前 10 個進程;用戶過濾器:all;pid 過濾器:all。正如下面截圖所示:
$ sudo $GOBIN/cpustat
cpustat – 監控 Linux CPU 使用
在上面的輸出中,之前顯示的系統範圍的度量欄位意義如下:
- usr - 用戶模式運行時間占 CPU 百分比的 min/avg/max 值。
- sys - 系統模式運行時間占 CPU 百分比的 min/avg/max 值。
- nice - 用戶模式低優先順序運行時間占 CPU 百分比的 min/avg/max 值。
- idle - 用戶模式空閑時間占 CPU 百分比的 min/avg/max 值。
- iowait - 等待磁碟 IO 的 min/avg/max 延遲時間。
- prun - 處於可運行狀態的 min/avg/max 進程數量(同「平均負載」一樣)。
- pblock - 被磁碟 IO 阻塞的 min/avg/max 進程數量。
- pstat - 在本次匯總間隔里啟動的進程/線程數目。
同樣還是上面的輸出,對於一個進程,不同列的意思分別是:
- name - 從
/proc/pid/stat
或/proc/pid/cmdline
獲取的進程名稱。 - pid - 進程 ID,也被用作 「tgid」 (線程組 ID)。
- min - 該 pid 的用戶模式+系統模式時間的最小樣本,取自
/proc/pid/stat
。比率是 CPU 的百分比。 - max - 該 pid 的用戶模式+系統模式時間的最大樣本,取自
/proc/pid/stat
。 - usr - 在匯總期間該 pid 的平均用戶模式運行時間,取自
/proc/pid/stat
。 - sys - 在匯總期間該 pid 的平均系統模式運行時間,取自
/proc/pid/stat
。 - nice - 表示該進程的當前 「nice」 值,取自
/proc/pid/stat
。值越高表示越好(nicer)。 - runq - 進程和它所有線程可運行但等待運行的時間,通過 netlink 取自 taskstats。比率是 CPU 的百分比。
- iow - 進程和它所有線程被磁碟 IO 阻塞的時間,通過 netlink 取自 taskstats。比率是 CPU 的百分比,對整個匯總間隔平均。
- swap - 進程和它所有線程等待被換入(swap in)的時間,通過 netlink 取自 taskstats。Scale 是 CPU 的百分比,對整個匯總間隔平均。
- vcx 和 icx - 在匯總間隔期間進程和它的所有線程自動上下文切換總的次數,通過 netlink 取自 taskstats。
- rss - 從
/proc/pid/stat
獲取的當前 RSS 值。它是指該進程正在使用的內存數量。 - ctime - 在匯總間隔期間等待子進程退出的用戶模式+系統模式 CPU 時間總和,取自
/proc/pid/stat
。 注意長時間運行的子進程可能導致混淆這個值,因為只有在子進程退出後才會報告時間。但是,這對於計算高頻 cron 任務以及 CPU 時間經常被多個子進程使用的健康檢查非常有幫助。 - thrd - 匯總間隔最後線程的數目,取自
/proc/pid/stat
。 - sam - 在這個匯總間隔期間該進程的樣本數目。最近啟動或退出的進程可能看起來比匯總間隔的樣本數目少。
下面的命令顯示了系統中運行的前 10 個 root 用戶進程:
$ sudo $GOBIN/cpustat -u root
查找 root 用戶正在運行的進程
要想用更好看的終端模式顯示輸出,像下面這樣用 -t
選項:
$ sudo $GOBIN/cpustat -u root -t
root 用戶正在運行的進程
要查看前 x 個進程(默認是 10),你可以使用 -n
選項,下面的命令顯示了系統中 正在運行的前 20 個進程:
$ sudo $GOBIN/cpustat -n 20
你也可以像下面這樣使用 -cpuprofile
選項將 CPU 信息寫到文件,然後用 cat 命令查看文件:
$ sudo $GOBIN/cpustat -cpuprofile cpuprof.txt
$ cat cpuprof.txt
要顯示幫助信息,像下面這樣使用 -h
選項:
$ sudo $GOBIN/cpustat -h
可以從 cpustat 的 Github 倉庫:https://github.com/uber-common/cpustat 查閱其它資料。
就是這些!在這篇文章中,我們向你展示了如何安裝和使用 cpustat,Linux 下的一個有用的系統性能測量工具。通過下面的評論框和我們分享你的想法吧。
作者簡介:
Aaron Kili 是一個 Linux 和 F.O.S.S(Free and Open-Source Software) 愛好者,一個 Linux 系統管理員、web 開發員,現在也是 TecMint 的內容創建者,他喜歡和電腦一起工作,他相信知識共享。
via: http://www.tecmint.com/cpustat-monitors-cpu-utilization-by-processes-in-linux/
作者:Aaron Kili 譯者:ictlyh 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive