AIX系統資源檢測

hq181msn發表於2008-04-22
計算機系統的效能最佳化是一個綜合性較強的話題,它涉及對系統資源以及應用環境(如應用程式及網路環境)的分析。本文將就如何檢測RS/6000系統效能,找出引起效能降低的資源瓶頸做一個簡單介紹
所謂系統資源包括記憶體、CPU和輸入/輸出裝置。透過使用以下命令,可以對RS/6000系統資源的負載情況有一個清楚的瞭解:[@more@]
vmstat
svmon
ps
tprof
iostat
netpmon
filemon
注:
使用命令vmstat、iostat和sar之前需安裝軟體包

bos.acct
使用命令ps需安裝軟體包

bos.rte.control
使用命令tprof、svmon、netpmon和filemon之前,需要安裝軟體包

perfagent.tools
我們可以從AIX系統盤的第一張光碟上尋找並安裝上述軟體包。 本文還將引用命令 vmtune 和 schedtune, 使用前需安裝軟體包

bos.adt.samples

記憶體瓶頸
本節介紹以下幾個用於檢測系統的記憶體使用情況的命令,透過它們可以清楚地瞭解系統記憶體的使用及分配情況,確認記憶體資源是否存在瓶頸。
1. vmstat
vmstat命令用於統計並顯示核心執行緒、虛擬記憶體、硬碟、中斷及CPU的使用情況。
執行命令
# vmstat 2 10
注: 當pi和po為連續非零值時,系統執行速度將會降低。
pi 每秒鐘從頁空間(Paging Space)調入記憶體的頁面數(4KB/page);
po 每秒鐘從記憶體調入頁空間(Paging Space)的頁面數;
當程式請求的記憶體頁面數大於記憶體中可用頁面數時, 一些記憶體頁會被換出記憶體, 存放於系統頁空間(Paging Space)中, 以後使用時再調入記憶體。由於訪問頁空間中頁面的速度遠小於對記憶體頁面的訪問速度,所以頻繁的換頁會降低系統執行速度。

注: 當fr和sr的數值增大時,sample明記憶體負載增大。
fr 為填充記憶體空閒sample或分配給某程式所需要釋放的記憶體頁面;
sr 為得到fr數量的空閒頁面所需要檢查的頁面數;
fr/sr比例為1:4sample明每釋放一個記憶體頁面需要檢查四個頁面。
當po*SYS>;fr(SYS為一系統引數,可用命令schedtune檢視)時,系統自身認為已到崩潰邊緣。SYS在有128MB或更多記憶體的系統上預設值為0, sample示禁止記憶體載入控制,否則預設值為6。系統崩潰sample明此時系統使用大量時間用於記憶體換入/換出,而沒有足夠時間處理應用或正常工作。這時一些程式將被臨時掛起,系統執行明顯減慢。
2. svmon
svmon命令統計並顯示虛擬記憶體的使用情況。
以超級使用者(root)身份執行命令
# svmon -Pau 10 | more
輸出如下:
Pid Command Inuse Pin Pgspace
13794 dtwm 1603 1 449
Pid: 13794
Command: dtwm
這條命令顯示出使用記憶體最多的前十個程式,並針對每個程式給出了一個詳細列sample(上sample為其中一個程式的描述資訊)。在每個程式的列sample中,找出Type為"work"及Description為"private"的相應行,檢視Pgspace顯示的使用頁面數(每個頁面大小為4096位元組),該數值為此段(segment)在虛擬記憶體空間中佔用的工作頁面(working pages)數,即佔用的頁空間中的頁面數。如果Pgspace值持續增長,系統則有可能存在記憶體洩漏(memory leak)。當應用程式不能正常釋放記憶體時會出現記憶體洩漏的問題。
上述命令格式及輸出結果適用於AIX4.3.3之前的版本。在AIX4.3.3的系統上可執行命令
svmon -Pu 10 | more
其輸出格式與上條命令基本相同,但欄位"Pgspace"用"Pgsp"取代。
3. ps
ps命令顯示當前執行的程式狀態資訊。
執行下列命令
#ps gv | head -n 1; ps gv | egrep -v "RSS" | sort +6b -7 -n -r
SIZE 頁空間中分配給該程式的Type為"work", Description為"private"的記憶體段大小(K位元組 為單位)。該數值也可透過命令svmon顯示。
RSS 程式當前佔用的記憶體段(實體記憶體)大小(K位元組為單位),包括Type為"work"和Description 為"private"的記憶體段及Type為"pers"和Description為"code"的記憶體段。該數值可通 過命令svmon顯示。
TRS 程式常駐記憶體的正文段大小,包括Type為"pers"及Description為"code"的記憶體段。該 數值可透過命令svmon顯示。
%MEM RSS佔系統實體記憶體的百分比(%)。
如上所述,使用ps命令同樣可以檢視各程式的記憶體分配情況。
CPU 瓶頸

下面我們將就如何使用命令vmstat、tprof和ps檢查系統是否存在CPU瓶頸做一個簡單介紹。
1. vmstat
使用命令
# vmstat 1 10
注: 執行佇列有程式等待時系統執行速度會降低。
id CPU 空閒時間或無I/O等待時間的百分比;
wa CPU I/O 等待時間的百分比;
r 執行佇列中的執行緒數;
如果 id 和wa 的值持續為接近0的值,sample明CPU此時處於繁忙狀態。
下面來看看欄位r(執行佇列中的執行緒數)。執行佇列中等待的執行緒數越多,系統效能受到的影響越大。
2. tprof
tprof命令用於統計每個程式的CPU使用情況。
以超級使用者root的身份執行下列命令,可以找出程式佔用的CPU時間:
# tprof -x sleep 30
此命令執行30秒鐘,在當前目錄下建立一個名為_prof.all 的檔案。30秒鐘內, CPU被排程次數約為3000次。__prof.all 檔案中的欄位Total 為此程式排程到的CPU次數。如果程式所對應的 Total字 段的值為1500,sample示該程式在3000次 CPU排程中佔用了1500次,或理解為使用了一半的CPU時間。tprof的輸出準確地顯示出哪個程式在使用CPU 時間。
__prof.all檔案示例:
3. netpmon
netpmon命令用於監控與網路有關的I/0及CPU的使用情況。
以root 身份執行下面的命令,可以找出程式使用的CPU時間,以及其中與網路有關的程式碼使用的CPU時間:
# netpmon -o /tmp/netpmon.out -O cpu -v; sleep 30; trcstop
此命令執行30 秒鐘,並在/tmp目錄下生成檔案 netpmon.out。其中欄位 CPU Time 為程式使用CPU
的時間總值,CPU%對應其百分比,Network CPU% 為程式中與網路有關的程式碼所佔用的CPU百分比。如下所示:
輸入輸出(I/O)瓶頸

1. iostat
iostat命令用於統計CPU的使用情況及tty裝置、硬碟和CD-ROM的I/0量。
執行命令:
iostat 5 10
將顯示10次統計結果,下面為其中一次的資料:
其中
%iowait 等待本地 I/O 時CPU 空閒時間的百分比
%idle 未等待本地 I/O 時CPU 空閒時間的百分比
當沒有需使用CPU的程式但至少有一個程式在等待I/O 時, CPU時間屬性標為iowait。如果iowait 時間的百分比很高,sample示該磁碟輸入輸出(I/O)是導致系統執行速度緩慢的主要原因。
%tm_act 硬碟繁忙的百分比
注: tm_act的值很高,sample明硬碟存在I/O瓶頸。
當%tm_act(硬碟繁忙時間)很高時,可能會感覺到系統執行速度在減慢。有些系統上某個硬碟的%tm_act值為60%或更高時,系統效能就會受到影響。
兩點建議:
1. 觀察繁忙與空閒的硬碟,將資料從忙的盤移至相對空閒的的盤上,這會在一定程度上減輕由此引起的I/O 瓶頸。

2. 依照上面"記憶體瓶頸"中介紹的方法檢查記憶體換頁的頻繁程度。大量的換頁操作會增加I/O負載。
2. filemon
filemon 命令用於檢視哪些檔案/邏輯卷/硬碟處於繁忙狀態。在系統I/O 處於繁忙狀態時執行下面的命令:
# filemon -u -O all -o /tmp/fmon.out; sleep 30; trcstop
30秒鐘後會生成記錄跟蹤資訊的檔案 /tmp/fmon.out。從該檔案中可以找出:
1. 最為繁忙的虛擬記憶體段(segment)、邏輯卷和物理卷;
2. 對頁空間(paging space)的讀寫次數,確認硬碟I/O 是由於應用程式操作還是頻繁的換頁操作;
3. 最為活躍的檔案或邏輯卷,如果它們存放在繁忙的物理捲上,可以考慮將資料移至相對空閒 的硬碟上,這樣有助於提高系統效能。最為繁忙的段的報sample裡列示出最繁忙的檔案所對應的檔案系統和i節點。檔案系統的安裝點(mount point)及檔案的i節點(inode)可與命令ncheck一起使用,來找出相對應的檔案。這個報sample可用來判斷該I/O操作是針對檔案系統、JFS Log 還是系統頁空間的。
透過檢查欄位"reads"和"read sequences"的值,可以判斷該操作是順序讀取還是隨機讀取。當 "read sequences"接近"reads"時,對該檔案的訪問則以隨機讀取方式居多。(附錄A為命令 filemon 的輸出 示 例)
結束語
在這裡有一個極有用的工具值得給大家一提,就是RS/6000效能診斷工具包-Performance Toolbox, 一個用來檢測系統效能的功能非常完善的軟體包。其中包括基於X-Windows的圖形 介面診斷工具 xmperf,用於實時檢測系統資源的使用情況。(注:該軟體包不在AIX作業系統光碟中提供。)
我們在上面的文字中討論了有關RS/6000系統的資源瓶頸問題,其中涉及到的系統命令的具體用法可以查詢AIX聯機命令手冊。此外,一個系統的效能如何還與網路因素及應用程式有著密切的關係,分析這諸多因素的方法及工具還有很多,在此不做一一介紹了。希望大家在實際工作中逐步摸索,成為RS/6000系統效能分析專家
附錄A (filemon 輸出檔案示例)
---------------------------------------
Thu Aug 19 11:30:49 1999
System: AIX texmex Node: 4 Machine: 000691854C00
0.369 secs in measured interval
Cpu utilization: 9.0%
Most Active Files
-----------------------------------------------------------------------------
#MBs #opns #rds #wrs file volume:inode
-----------------------------------------------------------------------------
0.1 1 14 0 smit.log /dev/hd4:858
0.0 1 0 13 null
0.0 2 4 0 ksh.cat /dev/hd2:16872
0.0 1 2 0 cmdtrace.cat /dev/hd2:16739
Most Active Segments
------------------------------------------------------------------------------
#MBs #rpgs #wpgs segid segtype volume:inode
------------------------------------------------------------------------------
0.1 13 0 5e93 ???
0.0 2 0 22ed ???
0.0 1 0 5c77 persistent
Most Active Logical Volumes
------------------------------------------------------------------------------
util #rblk #wblk KB/s volume description
------------------------------------------------------------------------------
0.06 112 0 151.9 /dev/hd4 /
0.04 16 0 21.7 /dev/hd2 /usr
Most Active Physical Volumes
------------------------------------------------------------------------------
util #rblk #wblk KB/s volume description
------------------------------------------------------------------------------
0.10 128 0 173.6 /dev/hdisk0 N/A
------------------------------------------------------------------------------
Detailed File Stats
------------------------------------------------------------------------------
file: /smit.log volume: /dev/hd4 (/) inode: 858
opens: 1
total bytes xfrd: 57344
reads: 14 (0 errs)
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0
read times (msec): avg 1.709 min 0.002 max 19.996 sdev 5.092
file: /dev/null
opens: 1
total bytes xfrd: 50600
writes: 13 (0 errs)
write sizes (bytes): avg 3892.3 min 1448 max 4096 sdev 705.6
write times (msec): avg 0.007 min 0.003 max 0.022 sdev 0.006
file: /usr/lib/nls/msg/en_US/ksh.cat volume: /dev/hd2 (/usr) inode: 16872
opens: 2
total bytes xfrd: 16384
reads: 4 (0 errs)
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0
read times (msec): avg 0.042 min 0.015 max 0.070 sdev 0.025
lseeks: 10
file: /usr/lib/nls/msg/en_US/cmdtrace.cat volume: /dev/hd2 (/usr) inode:
16739
opens: 1
total bytes xfrd: 8192
reads: 2 (0 errs)
read sizes (bytes): avg 4096.0 min 4096 max 4096 sdev 0.0
read times (msec): avg 0.062 min 0.049 max 0.075 sdev 0.013
lseeks: 8
------------------------------------------------------------------------------
Detailed VM Segment Stats (4096 byte pages)
------------------------------------------------------------------------------
SEGMENT: 5e93 segtype: ???
segment flags:
reads: 13 (0 errs)
read times (msec): avg 1.979 min 0.957 max 5.970 sdev 1.310
read sequences: 1
read seq. lengths: avg 13.0 min 13 max 13 sdev 0.0
SEGMENT: 22ed segtype: ???
segment flags: inode
reads: 2 (0 errs)
read times (msec): avg 8.102 min 7.786 max 8.418 sdev 0.316
read sequences: 2
read seq. lengths: avg 1.0 min 1 max 1 sdev 0.0
SEGMENT: 5c77 segtype: persistent
segment flags: pers defer
reads: 1 (0 errs)
read times (msec): avg 13.810 min 13.810 max 13.810 sdev 0.000
read sequences: 1
read seq. lengths: avg 1.0 min 1 max 1 sdev 0.0

------------------------------------------------------------------------------
Detailed Logical Volume Stats (512 byte blocks)
------------------------------------------------------------------------------
VOLUME: /dev/hd4 description: /
reads: 5 (0 errs)
read sizes (blks): avg 22.4 min 8 max 40 sdev 12.8
read times (msec): avg 4.847 min 0.938 max 13.792 sdev 4.819
read sequences: 3
read seq. lengths: avg 37.3 min 8 max 64 sdev 22.9
seeks: 3 (60.0%)
seek dist (blks): init 6344,
avg 40.0 min 8 max 72 sdev 32.0
time to next req(msec): avg 70.473 min 0.224 max 331.020 sdev 130.364
throughput: 151.9 KB/sec
utilization: 0.06

VOLUME: /dev/hd2 description: /usr
reads: 2 (0 errs)
read sizes (blks): avg 8.0 min 8 max 8 sdev 0.0
read times (msec): avg 8.078 min 7.769 max 8.387 sdev 0.309
read sequences: 2
read seq. lengths: avg 8.0 min 8 max 8 sdev 0.0
seeks: 2 (100.0%)
seek dist (blks): init 608672,
avg 16.0 min 16 max 16 sdev 0.0
time to next req(msec): avg 162.160 min 8.497 max 315.823 sdev 153.663
throughput: 21.7 KB/sec
utilization: 0.04

------------------------------------------------------------------------------
Detailed Physical Volume Stats (512 byte blocks)
------------------------------------------------------------------------------
VOLUME: /dev/hdisk0 description: N/A
reads: 7 (0 errs)
read sizes (blks): avg 18.3 min 8 max 40 sdev 12.6
read times (msec): avg 5.723 min 0.905 max 20.448 sdev 6.567
read sequences: 5
read seq. lengths: avg 25.6 min 8 max 64 sdev 22.9
seeks: 5 (71.4%)
seek dist (blks): init 4233888,
avg 171086.0 min 8 max 684248 sdev 296274.2
seek dist (%tot blks):
init 48.03665,
avg 1.94110 min 0.00009 max 7.76331 sdev 3.36145
time to next req(msec):
avg 50.340 min 0.226 max 315.865 sdev 108.483
throughput: 173.6 KB/sec
utilization: 0.10

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/216109/viewspace-1002833/,如需轉載,請註明出處,否則將追究法律責任。

相關文章