天天看點

linux 指令行檢視cpu,linux檢視CPU性能及工作狀态的指令mpstat,vmstat,iostat,sar,top...

衡量CPU性能的名額:

1,使用者使用CPU的情況;

CPU運作正常使用者程序

CPU運作niced process

CPU運作實時程序

2,系統使用CPU情況;

用于I/O管理:中斷和驅動

用于記憶體管理:頁面交換

使用者程序管理:程序開始和上下文切換

3,WIO:用于程序等待磁盤I/O而使CPU處于空閑狀态的比率。

4,CPU的空閑率,除了上面的WIO以外的空閑時間

5,CPU用于上下文交換的比率

6,nice

7,real-time

8,運作程序隊列的長度

9,平均負載

Linux中常用的監控CPU整體性能的工具有:

§ mpstat: mpstat 不但能檢視所有CPU的平均資訊,還能檢視指定CPU的資訊。

§ vmstat:隻能檢視所有CPU的平均資訊;檢視cpu隊列資訊;

§ iostat: 隻能檢視所有CPU的平均資訊。

§ sar: 與mpstat 一樣,不但能檢視CPU的平均資訊,還能檢視指定CPU的資訊。

§ top:顯示的資訊同ps接近,但是top可以了解到CPU消耗,可以根據使用者指定的時間來更新顯示。

下面一一介紹:

一,vmstat

[[email protected] ~]#vmstat -n 3       (每個3秒重新整理一次)

procs-----------memory--------------------swap-- ----io---- --system---- ------cpu--------

r b   swpd   free       buff       cache       si   so    bi    bo   in      cs        us   sy   id  wa

10    144 186164 105252 2386848    0    0     18   166  83     2          48   21  31  0

20    144 189620 105252 2386848    0    0      0   177  1039 1210   34   10  56  0

00    144 214324 105252 2386848    0    0      0    10   1071   670    32   5    63  0

00    144 202212 105252 2386848    0    0      0   189   1035   558    20   3    77  0

20    144 158772 105252 2386848    0    0      0   203  1065 2832    70  14  15  0

紅色内容标示CPU相關的參數

PROC(ESSES)

--r:如果在processes中運作的序列(process r)是連續的大于在系統中的CPU的個數表示系統現在運作比較慢,有多數的程序等待CPU.

如果r的輸出數大于系統中可用CPU個數的4倍的話,則系統面臨着CPU短缺的問題,或者是CPU的速率過低,系統中有多數的程序在等待CPU,造成系統中程序運作過慢.

SYSTEM

--in:每秒産生的中斷次數

--cs:每秒産生的上下文切換次數

上面2個值越大,會看到由核心消耗的CPU時間會越大

CPU

-us:使用者程序消耗的CPU時間百分

us的值比較高時,說明使用者程序消耗的CPU時間多,但是如果長期超50%的使用,那麼我們就該考慮優化程式算法或者進行加速(比如PHP/PERL)

-sy:核心程序消耗的CPU時間百分比(sy的值高時,說明系統核心消耗的CPU資源多,這并不是良性表現,我們應該檢查原因)

-wa:IO等待消耗的CPU時間百分比

wa的值高時,說明IO等待比較嚴重,這可能由于磁盤大量作随機通路造成,也有可能磁盤出現瓶頸(塊操作)。

-id:CPU處于空閑狀态時間百分比,如果空閑時間(cpu id)持續為0并且系統時間(cpu sy)是使用者時間的兩倍(cpu us) 系統則面臨着CPU資源的短缺.

解決辦法:

當發生以上問題的時候請先調整應用程式對CPU的占用情況.使得應用程式能夠更有效的使用CPU.同時可以考慮增加更多的CPU.  關于CPU的使用情況還可以結合mpstat,  ps aux top  prstat –a等等一些相應的指令來綜合考慮關于具體的CPU的使用情況,和那些程序在占用大量的CPU時間.一般情況下,應用程式的問題會比較大一些.比如一些SQL語句不合理等等都會造成這樣的現象.

二,sar

sar [options] [-A] [-o file] t [n]

在指令行中,n 和t 兩個參數組合起來定義采樣間隔和次數,t為采樣間隔,是必須有

的參數,n為采樣次數,是可選的,預設值是1,-o file表示将指令結果以二進制格式

存放在檔案中,file 在此處不是關鍵字,是檔案名。options 為指令行選項,sar指令

的選項很多,下面隻列出常用選項:

-A:所有報告的總和。

-u:CPU使用率

-v:程序、I節點、檔案和鎖表狀态。

-d:硬碟使用報告。

-r:記憶體和交換空間的使用統計。

-g:序列槽I/O的情況。

-b:緩沖區使用情況。

-a:檔案讀寫情況。

-c:系統調用情況。

-q:報告隊列長度和系統平均負載

-R:程序的活動情況。

-y:終端裝置活動情況。

-w:系統交換活動。

-x { pid | SELF | ALL }:報告指定程序ID的統計資訊,SELF關鍵字是sar程序本身的統計,ALL關鍵字是所有系統程序的統計。

用sar進行CPU使用率的分析

#sar -u 2 10

Linux 2.6.18-53.el5PAE (localhost.localdomain)  03/28/2009

07:40:17 PM       CPU     %user     %nice   %system   %iowait    %steal     %idle

07:40:19 PM       all         12.44      0.00         6.97          1.74         0.00        78.86

07:40:21 PM       all         26.75      0.00        12.50         16.00       0.00        44.75

07:40:23 PM       all         16.96      0.00         7.98          0.00         0.00        75.06

07:40:25 PM       all         22.50      0.00         7.00          3.25         0.00        67.25

07:40:27 PM       all         7.25        0.00         2.75          2.50         0.00        87.50

07:40:29 PM       all         20.05      0.00         8.56          2.93         0.00        68.46

07:40:31 PM       all         13.97      0.00         6.23          3.49         0.00        76.31

07:40:33 PM       all         8.25        0.00         0.75          3.50         0.00        87.50

07:40:35 PM       all         13.25      0.00         5.75          4.00         0.00        77.00

07:40:37 PM       all         10.03      0.00         0.50          2.51         0.00        86.97

Average:             all         15.15      0.00         5.91          3.99         0.00        74.95

在顯示内容包括:

%user:CPU處在使用者模式下的時間百分比。

%nice:CPU處在帶NICE值的使用者模式下的時間百分比。

%system:CPU處在系統模式下的時間百分比。

%iowait:CPU等待輸入輸出完成時間的百分比。

%steal:管理程式維護另一個虛拟處理器時,虛拟CPU的無意識等待時間百分比。

%idle:CPU空閑時間百分比。

在所有的顯示中,我們應主要注意%iowait和%idle,%iowait的值過高,表示硬碟存在I/O瓶頸,%idle值高,表示CPU較空閑,如果%idle值高但系統響應慢時,有可能是CPU等待配置設定記憶體,此時應加大記憶體容量。%idle值如果持續低于10,那麼系統的CPU處理能力相對較低,表明系統中最需要解決的資源是CPU。

用sar進行運作程序隊列長度分析:

#sar -q 2 10

Linux 2.6.18-53.el5PAE (localhost.localdomain)  03/28/2009

07:58:14 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15

07:58:16 PM         0         493          0.64        0.56        0.49

07:58:18 PM         1         491          0.64        0.56        0.49

07:58:20 PM         1         488          0.59        0.55        0.49

07:58:22 PM         0         487          0.59        0.55        0.49

07:58:24 PM         0         485          0.59        0.55        0.49

07:58:26 PM         1         483          0.78        0.59        0.50

07:58:28 PM         0         481          0.78        0.59        0.50

07:58:30 PM         1         480          0.72        0.58        0.50

07:58:32 PM         0         477          0.72        0.58        0.50

07:58:34 PM         0         474          0.72        0.58        0.50

Average:               0         484          0.68        0.57        0.49

runq-sz 準備運作的程序運作隊列。

plist-sz  程序隊列裡的程序和線程的數量

ldavg-1  前一分鐘的系統平均負載(load average)

ldavg-5  前五分鐘的系統平均負載(load average)

ldavg-15  前15分鐘的系統平均負載(load average)

順便說一下load avarage的含義

load average可以了解為每秒鐘CPU等待運作的程序個數.

在Linux系統中,sar -q、uptime、w、top等指令都會有系統平均負載load average的輸出,那麼什麼是系統平均負載呢?

系統平均負載被定義為在特定時間間隔内運作隊列中的平均任務數。如果一個程序滿足以下條件則其就會位于運作隊列中:

- 它沒有在等待I/O操作的結果

- 它沒有主動進入等待狀态(也就是沒有調用'wait')

- 沒有被停止(例如:等待終止)

例如:

# uptime

20:55:40 up 24 days,  3:06,  1 user,  load average: 8.13, 5.90, 4.94

指令輸出的最後内容表示在過去的1、5、15分鐘内運作隊列中的平均程序數量。

一般來說隻要每個CPU的目前活動程序數不大于3那麼系統的性能就是良好的,如果每個CPU的任務數大于5,那麼就表示這台機器的性能有嚴重問題。對 于上面的例子來說,假設系統有兩個CPU,那麼其每個CPU的目前任務數為:8.13/2=4.065。這表示該系統的性能是可以接受的。

三,iostat

#iostat -c 2 10

Linux 2.6.18-53.el5PAE (localhost.localdomain)  03/28/2009

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

30.10    0.00          4.89         5.63    0.00   59.38

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

8.46       0.00          1.74         0.25    0.00   89.55

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

22.06     0.00          11.28       1.25    0.00   65.41

四,mpstat

mpstat 是Multiprocessor Statistics的縮寫,是實時系統監控工具。其報告與CPU的一些統計資訊,這些資訊存放在/proc/stat檔案中。在多CPUs系統裡,其不但能檢視所有CPU的平均狀況資訊,而且能夠檢視特定CPU的資訊。下面隻介紹 mpstat與CPU相關的參數,mpstat的文法如下:

mpstat [-P {|ALL}] [internal [count]]

參數的含義如下:

參數 解釋

-P {|ALL} 表示監控哪個CPU, cpu在[0,cpu個數-1]中取值

internal 相鄰的兩次采樣的間隔時間

count 采樣的次數,count隻能和delay一起使用

當沒有參數時,mpstat則顯示系統啟動以後所有資訊的平均值。有interval時,第一行的資訊自系統啟動以來的平均資訊。從第二行開始,輸出為前一個interval時間段的平均資訊。與CPU有關的輸出的含義如下:

參數 解釋 從/proc/stat獲得資料

CPU 處理器ID

user 在internal時間段裡,使用者态的CPU時間(%) ,不包含 nice值為負 程序 dusr/dtotal*100

nice 在internal時間段裡,nice值為負程序的CPU時間(%) dnice/dtotal*100

system 在internal時間段裡,核心時間(%) dsystem/dtotal*100

iowait 在internal時間段裡,硬碟IO等待時間(%) diowait/dtotal*100

irq 在internal時間段裡,軟中斷時間(%) dirq/dtotal*100

soft 在internal時間段裡,軟中斷時間(%) dsoftirq/dtotal*100

idle 在internal時間段裡,CPU除去等待磁盤IO操作外的因為任何原因而空閑的時間閑置時間 (%) didle/dtotal*100

intr/s 在internal時間段裡,每秒CPU接收的中斷的次數 dintr/dtotal*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

duser=user_cur – user_pre

dtotal=total_cur-total_pre

其中_cur 表示目前值,_pre表示interval時間前的值。上表中的所有值可取到兩位小數點。

#mpstat -P ALL 2 10

Linux 2.6.18-53.el5PAE (localhost.localdomain)  03/28/2009

10:07:57 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s

10:07:59 PM  all   20.75    0.00   10.50    1.50    0.25    0.25    0.00   66.75   1294.50

10:07:59 PM    0   16.00    0.00    9.00    1.50    0.00    0.00    0.00   73.50   1000.50

10:07:59 PM    1   25.76    0.00   12.12    1.52    0.00    0.51    0.00   60.10    294.00