一、mpstat命令介紹
mpstat是Multiprocessor Statistics的縮寫,是CPU實時監控工具。它會顯示CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CPU系統里,mpstat命令不僅能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。mpstat最大的特點是:可以查看多核心cpu中每個計算核心的統計數據;而類似的工具vmstat只能查看系統整體cpu情況。
二、mpstat語法
mpstat命令的語法格式為:
mpstat [-P {|ALL}] [internal [count]]
| 參數 | 解釋 |
| -P {|ALL} | 表示監控哪個CPU,例如mpstat -P 0 mpstat -P 7 mpstat -P ALL |
| internal | 相鄰的兩次采樣的間隔時間 |
| count | 采樣的次數,count只能和delay一起使用 |
| 當沒有參數時,mpstat只顯示系統所有信息的平均值,有internal參數時,第一行的信息是自系統啟動以來的平均信息,從第二行開始,輸出為前一個internal時間段的平均信息 | |
三、實例
【例1】查看CPU整體的運行狀況,每秒更新1次
➜ test mpstat 1 #沒有-P {|ALL}參數時,默認顯示CPU整體運行狀況 Linux 4.14.81.bm.15-amd64 (n227-080-096) 10/04/21 _x86_64_ (8 CPU) 11:05:37 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 11:05:38 all 0.50 0.00 1.51 0.00 0.00 0.00 0.13 0.00 0.00 97.86 11:05:39 all 0.75 0.00 1.76 0.00 0.00 0.00 0.13 0.00 0.00 97.36 11:05:40 all 0.25 0.00 1.76 0.00 0.00 0.00 0.13 0.00 0.00 97.86 11:05:41 all 0.63 0.00 1.51 0.00 0.00 0.00 0.25 0.00 0.00 97.62 11:05:42 all 1.00 0.00 2.63 0.00 0.00 0.00 0.13 0.00 0.00 96.24
【例2】查看每個CPU核心的運行狀況,每秒更新1次
➜ test mpstat -P ALL 1 #有-P {|ALL}參數時,會顯示全部CPU核心的運行狀況 Linux 4.14.81.bm.15-amd64 (n227-080-096) 10/04/21 _x86_64_ (8 CPU) 11:07:11 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 11:07:12 all 0.76 0.00 2.15 0.00 0.00 0.00 0.13 0.00 0.00 96.97 11:07:12 0 0.00 0.00 4.00 0.00 0.00 0.00 1.00 0.00 0.00 95.00 11:07:12 1 0.00 0.00 1.01 0.00 0.00 0.00 0.00 0.00 0.00 98.99 11:07:12 2 0.00 0.00 3.03 0.00 0.00 0.00 0.00 0.00 0.00 96.97 11:07:12 3 1.01 0.00 2.02 0.00 0.00 0.00 0.00 0.00 0.00 96.97 11:07:12 4 3.03 0.00 2.02 0.00 0.00 0.00 0.00 0.00 0.00 94.95 11:07:12 5 0.00 0.00 3.06 0.00 0.00 0.00 0.00 0.00 0.00 96.94 11:07:12 6 1.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00 11:07:12 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 11:07:12 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 11:07:13 all 0.38 0.00 1.13 0.00 0.00 0.00 0.38 0.00 0.00 98.11 11:07:13 0 0.99 0.00 1.98 0.00 0.00 0.00 0.99 0.00 0.00 96.04 11:07:13 1 0.00 0.00 2.04 0.00 0.00 0.00 0.00 0.00 0.00 97.96 11:07:13 2 0.00 0.00 2.02 0.00 0.00 0.00 0.00 0.00 0.00 97.98 11:07:13 3 0.00 0.00 0.00 0.00 0.00 0.00 1.01 0.00 0.00 98.99 11:07:13 4 1.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00 11:07:13 5 0.00 0.00 1.00 0.00 0.00 0.00 1.00 0.00 0.00 98.00 11:07:13 6 0.00 0.00 1.00 0.00 0.00 0.00 1.00 0.00 0.00 98.00 11:07:13 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
【例3】每秒輸出一次CPU整體統計信息,一共輸出5次,然后結束
➜ test mpstat 1 5 Linux 4.14.81.bm.15-amd64 (n227-080-096) 10/04/21 _x86_64_ (8 CPU) 12:00:52 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 12:00:53 all 0.63 0.00 2.89 0.00 0.00 0.00 0.13 0.00 0.00 96.36 12:00:54 all 2.15 0.00 3.92 0.13 0.00 0.13 0.25 0.00 0.00 93.42 12:00:55 all 0.50 0.00 1.13 0.00 0.00 0.00 0.38 0.00 0.00 97.99 12:00:56 all 0.38 0.00 1.63 0.00 0.00 0.13 0.13 0.00 0.00 97.74 12:00:57 all 0.38 0.00 1.64 0.00 0.00 0.00 0.13 0.00 0.00 97.86 Average: all 0.81 0.00 2.24 0.03 0.00 0.05 0.20 0.00 0.00 96.68
上述命令,每秒輸出一次信息,一共輸出5次,然后結束。最后會打印一下這5次輸出的平均值
四、mpstat各字段的含義
| 字段 | 含義 |
| %usr | 在internal時間段里,用戶態占用CPU的時間(%),不包含nice值為負的進程 |
| %nice | 在internal時間段里,nice值為負的進程占用CPU的時間(%) |
| %sys | 在internal時間段里,內核態占用CPU的時間(%) |
| %iowait | 在internal時間段里,等待IO占用CPU的時間(%) |
| %irq | 在internal時間段里,硬中斷占用CPU的時間(%) |
| %soft | 在internal時間段里,軟中斷占用CPU的時間(%) |
| %guest | CPU處理虛擬進程花費的時間開銷 |
| %idle | 在internal時間段里,空閑CPU的時間(%) |
五、總結
1. mpstat和vmstat命令的差別:mpstat可以顯示每個CPU的統計信息,而vmstat只顯示所有CPU的統計信息。因此,編寫糟糕的應用程序(不使用多線程體系結構)可能會運行在一個多處理器機器上,而不使用所有處理器。從而導致一個 CPU 過載,而其他 CPU 卻很空閑。通過 mpstat 可以輕松診斷這些類型的問題。
2.vmstat中所有關於CPU的總結都適合mpstat。當您看到較低的 %idle 數字時,就知道出現了 CPU 不足的問題。當您看到較高的 %iowait 數字時,就知道在當前負載下等待IO嚴重。
