上節(jié)我們已經(jīng)講了top,vmstat資源監(jiān)控 工具,今天我們要看一樣另一個監(jiān)控工具,mpstat。
介紹vmstat,已經(jīng)安裝了sysstat工具,這款工具有mpstat不用再額外安裝工具了。
mpstat介紹
mpstat是 Multiprocessor Statistics的縮寫,是實時系統(tǒng)監(jiān)控工具,是用來監(jiān)控cpu信息,這些信息存放在/proc/stat文件中。
在多核心cpu系統(tǒng)中,不僅可以查看cpu平均信息,還可以查看指定cpu信息
mpstat的語法如下
mpstat [-P {cpu|ALL}] [internal [count]]

mpstat命令使用
(1)當mpstat不帶參數(shù)時,輸出為從系統(tǒng)啟動以來的平均值
[root@vircent7 ~]# mpstat
Linux 3.10.0-1127.el7.x86_64 (vircent7.kyj) 2021年03月12日 _x86_64_ (2 CPU)
15時15分43秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
15時15分43秒 all 0.08 0.00 0.10 0.06 0.00 0.01 0.00 0.00 0.00 99.76
[root@vircent7 ~]#
上面15時15分43秒表示系統(tǒng)從啟動到當前這個時間(就是你服務器當前時間)的cpu整體使用狀態(tài)。
(2)mpstat -P ALL 5 2
表示每5秒產(chǎn)生一個報告,總共產(chǎn)生2個
ALL表示查看所有cpu
如下圖:15時18分07秒 和15時18分12秒是間隔5秒產(chǎn)生的一組數(shù)據(jù)
15時18分12秒 和15時18分17秒 是間隔5秒,產(chǎn)生的第二組數(shù)據(jù)。
[root@vircent7 ~]# mpstat -P ALL 5 2
Linux 3.10.0-1127.el7.x86_64 (vircent7.kyj) 2021年03月12日 _x86_64_ (2 CPU)
#(1)第一組數(shù)據(jù)
15時18分07秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
15時18分12秒 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 #這代表2個cpu的平均信息
15時18分12秒 0 0.00 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.80#這代表第一個cpu的活躍數(shù)據(jù)
15時18分12秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00#這代表第二個cpu的獲取數(shù)據(jù)
#第二組數(shù)據(jù)
15時18分12秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
15時18分17秒 all 0.00 0.00 0.10 0.00 0.00 0.00 0.00 0.00 0.00 99.90
15時18分17秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
15時18分17秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均時間: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
平均時間: all 0.00 0.00 0.05 0.00 0.00 0.00 0.00 0.00 0.00 99.95
平均時間: 0 0.00 0.00 0.10 0.00 0.00 0.00 0.00 0.00 0.00 99.90
平均時間: 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
[root@vircent7 ~]#
上面打印信息表示每5秒產(chǎn)生了2個關于處理器的統(tǒng)計數(shù)據(jù)報告,一共產(chǎn)生2個interval 的信息,然后再給出這2個interval的平均信息。默認時,輸出是按照CPU 號排序。第一個行給出了從系統(tǒng)引導以來的所有活躍數(shù)據(jù)。接下來每行對應一個處理器的活躍狀態(tài)。
(3)mpstat -P ALL|0:顯示指定CPU使用狀態(tài)
上面我們可以看到cpu有2個,序號是0和1,這里我們只看序號是0的這個cpu使用情況。
[root@vircent7 ~]# mpstat -P 0 5 2
Linux 3.10.0-1127.el7.x86_64 (vircent7.kyj) 2021年03月12日 _x86_64_ (2 CPU)
15時42分46秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
15時42分51秒 0 0.00 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.80
15時42分56秒 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均時間: 0 0.00 0.00 0.10 0.00 0.00 0.00 0.00 0.00 0.00 99.90
上面我們可以到,cpu0輸出了2組數(shù)據(jù),51秒輸出一組,56秒輸出1組,,最后一行是cpu0的平均信息。
讓我們看一看這些列值的含義:
%user 表示處理用戶進程所使用 CPU 的百分比。用戶進程是用于應用程序(如 Oracle 數(shù)據(jù)庫)的非內(nèi)核進程。
在本示例輸出中,用戶 CPU 百分比非常低。
%nice 表示使用 nice 命令對進程進行降級時 CPU 的百分比。在之前的部分中已經(jīng)對 nice 命令進行了介紹。簡單來說,nice 命令更改進程的優(yōu)先級。
%system 表示內(nèi)核進程使用的 CPU 百分比
%iowait 表示等待進行 I/O 所使用的 CPU 時間百分比
%irq 表示用于處理系統(tǒng)中斷的 CPU 百分比
%soft 表示用于軟件中斷的 CPU 百分比
%idle 顯示 CPU 的空閑時間
%intr/s 顯示每秒 CPU 接收的中斷總數(shù)
上面每列都是時間的百分比,比如:
%usr:在internal時間段里,用戶態(tài)的CPU時間占用百分比(%),不包含 nice值為負進程
計算公式:usr/total*100
CPU總的工作時間:
total_cur = user + system + nice + idle + iowait + irq + softirq
total_pre = pre_user + pre_system + pre_nice + pre_idle + pre_iowait + pre_irq + pre_softirq
user = user_cur – user_pre
total = total_cur - total_pre
其中_cur 表示當前值,_pre表示interval時間前的值。上表中的所有值可取到兩位小數(shù)點
vmstat和mpstat區(qū)別
mpstat 可以顯示每個處理器的統(tǒng)計,而 vmstat 顯示所有處理器的統(tǒng)計。因此,編寫糟糕的應用程序(不使用多線程體系結構)可能會運行在一個多處理器機器上,
而不使用所有處理器。從而導致一個 CPU 過載,而其他 CPU 卻很空閑。通過 mpstat 可以輕松診斷這些類型的問題。
針對 Oracle 用戶的用法
與 vmstat 相似,mpstat 命令還產(chǎn)生與 CPU 有關的統(tǒng)計信息,因此所有與 CPU 問題有關的討論也都適用于 mpstat。
當您看到較低的 %idle 數(shù)字時,您知道出現(xiàn)了 CPU 不足的問題。當您看到較高的 %iowait 數(shù)字時,
您知道在當前負載下 I/O 子系統(tǒng)出現(xiàn)了某些問題。該信息對于解決 Oracle 數(shù)據(jù)庫性能問題非常方便。