2012年1月3日 星期二

監控Linux 系統效能狀況

Linux 系統管理必需能夠隨時監控及掌控系統的效能狀態,以便可以在必要時加以調整以確保系統的效能。而一般系統效能的監控範圍包括:

  • CPU的利用量
  • 實體記憶體的使用狀況
  • 虛擬記憶體的使用狀況
  • 磁碟使用狀況
  • 網路使用率及流量

Linux 環境下有許多工具與指令可以用來收集和報告上述系統資源的耗用狀況,最常見的大概是sysstat套件內的sar、iostat、mpstat等工具,不過這些指令大多可提供相雷同或部份重複性的資料,下表整理了Linux系統效能監控指令的異同與比對。

工具指令

CPU

記憶體

磁碟I/O

網路流量

sar

(-u)

(-r)

(-d -p)

(-n)

vmstat

▲ (-d)

 

iostat

 

 

mpstat

 

 

 

底下將說明如何使用各種不同的工具來監控或收集各項系統效能。

 

壹. 監控CPU的使用狀況

若您需要監控目前CPU利用率以便了解CPU的負載量是否過重,可使用的工具還不少,如mpstat、vmstat、top

(1) mpstat 

mpstat 為Multiprocessor Statistics的縮寫,用以報告處理器相關的資訊,不但可以查看所有CPU的平均訊息,也可以指定特定CPU的訊息。

mpstat 的基本語法為: mpstat [-P {|ALL}] [間隔 [次數]]

    -P {|ALL} 表示監控那個CPU, cpu可在 [0,cpu個數-1] 之間的數值 ;

下面範例每隔五秒取一次CPU的統計資訊,共三次。

# mpstat -P ALL 5 3
Linux 2.6.32-220.el6.x86_64 (nm.lij.idv.tw)     西元2012年04月22日      _x86_64_        (1 CPU)

14時42分24秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
14時42分29秒  all    1.22    0.00    2.03    0.00    0.81    0.20    0.00    0.00   95.73
14時42分29秒    0    1.22    0.00    2.03    0.00    0.81    0.20    0.00    0.00   95.73

14時42分29秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
14時42分34秒  all    0.40    0.00    1.80    0.00    1.00    0.20    0.00    0.00   96.59
14時42分34秒    0    0.40    0.00    1.80    0.00    1.00    0.20    0.00    0.00   96.59

14時42分34秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
14時42分39秒  all    0.00    0.00    0.40    0.00    0.60    0.00    0.00    0.00   99.00
14時42分39秒    0    0.00    0.00    0.40    0.00    0.60    0.00    0.00    0.00   99.00

平均時間:  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
平均時間:  all    0.54    0.00    1.41    0.00    0.80    0.13    0.00    0.00   97.12
平均時間:    0    0.54    0.00    1.41    0.00    0.80    0.13    0.00    0.00   97.12

%usr : CPU用來執行使用者應用程式碼所花費的時間百分比
%nice : CPU用來執行擁有優先權(nice priority)的使用者應用程式碼所花費的時間百分比
%sys : CPU用來執行作業系統核心程式碼所花費的時間百分比
%iowait : CPU等待磁碟I/O請求所花費的時間百分比
%irq : CPU服務硬體中斷所佔用的時間百分比
%soft : CPU服務軟體中斷所佔用的時間百分比
%steal : 等待Hypervisor服務另一顆虛擬處理器的等待時間百分比(與虛擬化有關)
%guest : 用來執行虛擬CPU的時間百分比(與虛擬化有關)
%idle:CPU 閒置時間百分比

 

(2) vmstat

vmstat 為virtual memory statistics的縮寫,雖然顧名思義,是一個用來檢查記憶體使用狀況的工具,但其也可以用來顯示CPU時間資訊,如下圖所示,它可以依序顯示 us, sy, id, wa, st分別表示:

us (user time) : 執行一般使用者程式(非作業系統核心碼)所花費的時間。

sy (system time) :  執行作業系統核心碼(Kernel code)所花費的時間。

id (idle time) : CPU 閒置時間,此值越大,代表CPU負載量越輕。

wa (waiting time) : CPU等待IO的時間

st (stolen time):虛擬機器執行時花費的時間。

# vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0   3348 203312 194476 504708    0    0     0    17   12   10  1  2 97  0  0
0  0   3348 203056 194476 504724    0    0     0   186  125   95  1  5 92  1  0
0  0   3348 203180 194476 504708    0    0     0    28   47   63  0  1 98  0  0
1  0   3348 203180 194476 504708    0    0     0    12   37   55  0  1 99  0  0
0  0   3348 203180 194476 504708    0    0     0    13   41   59 0  1 99  0  0

 

(3) sar : 收集與報告歷史資料

sar 的結果與vmstat、iostat、mpstat 命令相似,但最主要的不同在於sar會顯示歷程記錄,通常您下達sar指令而不加任何選項時,sar會顯示從午夜零點開始後,每隔十分鐘間隔所收集的CPU歷程資訊

# sar
Linux 2.6.32-220.el6.x86_64 (nm.lij.idv.tw)     西元2012年04月22日      _x86_64_        (1 CPU)

00時00分01秒     CPU  %user   %nice  %system iowait   %steal  %idle
00時10分01秒     all      1.45      0.00      2.22      0.10      0.00     96.23
00時20分01秒     all      1.47      0.00      2.20      0.07      0.00     96.26
00時30分01秒     all      1.53      0.00      2.26      0.09      0.00     96.11
...................................
...................................
14時20分01秒     all      1.62      0.00      2.28      0.10      0.00     96.00
14時30分01秒     all      1.49      0.00      2.11      0.13      0.00     96.26
14時40分01秒     all      1.47      0.00      2.14      0.35      0.00     96.04
14時50分01秒     all      1.69      0.00      2.39      0.09      0.00     95.84
15時00分01秒     all      1.52      0.00      2.20      0.11      0.00     96.16
平均時間:        all      1.53      0.00      2.24      0.14      0.00     96.09

 

貳. 監控記憶體的使用狀況

 

(1) vmstat

# vmstat 3 4
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0   3860 176960 192724 527776    0    0     0    17   12   12  1  2 97  0  0
0  0   3860 176944 192724 527776    0    0     0    21   56   72  0  2 98  0  0
0  0   3860 176944 192724 527776    0    0     0     0   41   53  0  1 99  0  0
0  0   3860 176944 192724 527776    0    0     0    13   56   69  0  1 99  0  0

 

(2) sar -r

# sar -r
Linux 2.6.32-220.el6.x86_64 (nm.lij.idv.tw)     西元2012年04月22日      _x86_64_        (1 CPU)

00時00分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
00時10分01秒    180060   1474228     89.12    197376    522832   1135756     21.27
00時20分01秒    176412   1477876     89.34    197376    523268   1136388     21.28
..................
...................

18時50分01秒    174128   1480160     89.47    192720    527172   1151728     21.57
19時00分01秒    173152   1481136     89.53    192720    527592   1152816     21.59
平均時間:    187832   1466456     88.65    194944    517539   1144513     21.43

 

參. 監控磁碟使用狀況

 

(1) sar –d –p

# sar -d -p 1 3
Linux 2.6.32-220.el6.x86_64 (nm.lij.idv.tw)     西元2012年04月22日      _x86_64_        (1 CPU)

19時12分40秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
19時12分41秒       sda     11.88      0.00    102.97      8.67      0.05      4.42      0.67      0.79

19時12分41秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
19時12分42秒       sda      4.04      0.00    113.13     28.00      0.00      1.00      1.00      0.40

19時12分42秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
19時12分43秒       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

平均時間:       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
平均時間:       sda      5.33      0.00     72.00     13.50      0.02      3.56      0.75      0.40

 

(2) iostat –d

# iostat -d
Linux 2.6.32-220.el6.x86_64 (nm.lij.idv.tw)     西元2012年04月22日      _x86_64_        (1 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               1.46         0.69        34.34    1988478   99417320

 

 

肆. 監控網路效能

 

(1) sar –n

# sar -n DEV 3 2
Linux 2.6.32-220.el6.x86_64 (nm.lij.idv.tw)     西元2012年04月22日      _x86_64_        (1 CPU)

19時26分40秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
19時26分43秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
19時26分43秒      eth0      1.67      1.00      0.12      0.05      0.00      0.00      0.00

19時26分43秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
19時26分46秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
19時26分46秒      eth0      5.00      4.67      0.44      0.49      0.00      0.00      0.00

平均時間:     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
平均時間:        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均時間:      eth0      3.33      2.83      0.28      0.27      0.00      0.00      0.00

 

(2) iptraf

iptraf是一個文字介面互動式的網路監視工具,不過需要先在您的系統上安裝它(如 yum –y install iptraf),iptraf可以顯示下列資訊

  • TCP連線的流量統計
  • 網路卡的IP流量統計
  • 通訊協定的網路流量統計
  • TCP/UDP 連接埠的網路流量統計
  • 第二層位址的網路流量統計

iptraf0

 

iptraf

 

伍. 其它

還有一些Linux命令對於了解系統效能也有所助益。

gnome-system-monitor (X 視窗)

gnome_system_monitor

ksysguard

ksysguard提供兩個工作表 - 系統負載頁(下圖)和行程表,而系統負載有3個圖表,每個分別說明 「CPU歷史」,「記憶體和Swap歷史」,「網絡歷史」的負載狀況。如果你將滑鼠指標停在到每個圖上頭,則你會看到帶有顏色的詳細分析。

kde_system_monitor

 

uptime命令

最後三個數字顯示了過去1、5、15分鐘的平均系統負載量,有趣的是top或w這二個指令所顯示第一行也同樣有這三個數值。

# uptime
20:27:03 up 33 days, 21:12,  2 users,  load average: 0.15, 0.19, 0.17