性能優(yōu)化以及確定系統(tǒng)中的性能瓶頸是系統(tǒng)管理員的主要任務之一。在一個計算機系統(tǒng)中,CPU、內存、硬盤和網絡是影響系統(tǒng)性能的主要因素,因此系統(tǒng)性能調整也主要在于如何在這些資源中獲得某種平衡,以滿足人們對系統(tǒng)性能的期望。性能調制需要很多技巧,知識以及經驗,不能僅靠分析統(tǒng)計數字,圖表就可取得,性能調制有時是一件復雜甚至是非常困難的任務。
如同其它UNIX系統(tǒng)一樣,AIX也給系統(tǒng)管理員剪裁系統(tǒng)提供了非常豐富的手段。這里我們簡單介紹RS/6000 AIX系統(tǒng)中幾個用于監(jiān)控和調制多項系統(tǒng)資源的工具,每個工具的功能都很強,如想更透徹地了解這些命令的用法,請參考有關技術資料或手冊。這里講述的命令將不僅僅局限于CPU、硬盤、內存或網絡資源的某個方面,它們可用于其中的一項或多項資源。
AIX監(jiān)控工具 1、iostat iostat命令主要通過觀察物理磁盤的活躍時間以及他們的平均傳輸速度,監(jiān)控系統(tǒng)輸入/輸出設備負載。根據iostat命令產生的報告,用戶可確定一個系統(tǒng)配置是否平衡,并據此在物理磁盤與適配器之間更好地平衡輸入/輸出負載。
iostat工具的主要目的是通過監(jiān)控磁盤的利用率(tm_act字段),而探測到系統(tǒng)中的I/O瓶頸。iostat還可用于確定CPU問題,輔助容量規(guī)劃,并可以為最終解決I/O問題提供相關材料。vmstat和iostat聯合使用,可捕獲到確定與CPU,內存和I/O子系統(tǒng)有關的性能問題的必需數據。
iostat命令可產生下面四種類型的報告:
· tty和CPU利用情況
· 磁盤的利用情況
· 系統(tǒng)吞吐率
· 適配器吞吐率
2、netpmon
netpmon命令可以監(jiān)控關于網絡行為的系統(tǒng)事件和性能以及網絡行為對CPU的消耗。netpmon命令在指定的監(jiān)控周期報告網絡行為。
netpmon啟動后直至發(fā)布trcstop命令終止它之前,一直在后臺運行。如果使用缺省設置,trace命令將會在netpmon命令之后立即自動啟動。另外,netpmon中還可用trcon命令選擇在后面的某個時間跟蹤。當這種跟蹤用trcstop命令終止后,netpmon命令就會輸出它的報告并退出。缺省時報告會輸出到標準輸出,需要時也可以重定向到某個文件。
netpmon命令還可以在一次先前產生的跟蹤中以脫機模式使用。在這樣的情況下,需要用gennames命令產生一個文件。該文件必須在trace終止后立即產生。
所產生的報告中包括CPU使用情況、網絡設備驅動器I/O情況、互聯網絡套接字調用,以及網絡文件系統(tǒng)(NFS)I/O信息:
· CPU use:netpmon命令報告線程和中斷處理器對CPU的使用情況。該命令將網絡相關行為的CPU使用情況與其它行為的CPU使用情況區(qū)分開。
· Network Device Driver I/O:netpmon命令監(jiān)控網絡適配器上所通過的I/O統(tǒng)計。
· Internet Socket Calls:netpmon命令在互聯網絡套接字上監(jiān)控read,recv,recvfrom,write,send以及sendto子程序。ICMP,TCP,UDP這幾個協(xié)議的每個進程都會予以報告。
· NFS I/O:netpmon命令監(jiān)控客戶NFS文件上的read和write子程序,NFS客戶上的RPC請求以及NFS服務器的read和write請求。
3、PDT(性能診斷工具) PDT通過收集和集中各種性能、配置和可用數據自動找出性能問題。PDT評估系統(tǒng)的當前狀態(tài)并跟蹤系統(tǒng)在工作量和性能上的變化。PDT數據收集和報告很容易起用,不需要更多的管理行為。
雖然許多常見的系統(tǒng)性能問題都有特定性,但PDT還試圖用一些被認為性能好的系統(tǒng)中的通用概念來幫助它查找問題。這些概念包括:
· 資源的平衡使用
· 在限定范圍操作
· 確定的工作量趨勢
· 無錯誤操作
· 系統(tǒng)參數得到適當設置。
4、ps ps命令是UNIX系統(tǒng)中最常見的命令,它主要顯示系統(tǒng)中關于進程的統(tǒng)計和狀態(tài)信息,如進程ID,I/O行為以及CPU利用率等。利用ps命令提供的信息,可決定一個進程運行了多長時間,進程使用了多少CPU時間,以及進程是否受系統(tǒng)的懲罰。還可用ps命令確定進程使用了多少內存,完成多少I/O,進程的優(yōu)先級以及是誰創(chuàng)建了進程。
下面這幾個命令組合對于管理RS/6000 AIX系統(tǒng)有幫助:
(1)顯示10個消耗CPU最多的進程:
# ps aux |head -1 ;ps aux |sort -rn +2 |head –10
(2)顯示10個消耗存儲空間最多的進程:
# ps aux |head -1 ;ps aux |sort -rn +3 |head -10
?。?)按順序顯示系統(tǒng)中受罰的進程:
#ps -eakl |head -1 ;ps -eakl |sort -rn +5
(4)按優(yōu)先級順序顯示系統(tǒng)中的進程:
#ps -eakl |sort -n +6 |head
?。?)按處理時間為順序顯示系統(tǒng)中的前十個進程:
#ps vx |head -1 ;ps vx |grep -v PID |sort -rn +3 |head –10
?。?)按實際內存使用的多少順序顯示系統(tǒng)中的前十個進程:
#ps vx |head -1 ;ps vx |grep -v PID |sort -rn +6 |head –10
(7)按換入頁面的多少順序顯示系統(tǒng)中的前10個進程:
#ps vx |head -1 ;ps vx |grep -v PID |sort -rn +4 |head -10
5、vmstat
vmstat命令報告關于核心線程,虛擬內存,自陷(trap),磁盤以及CPU行為的統(tǒng)計。而且每種行為報告都被更細致地用百分比分別表示用戶態(tài)、核態(tài)、空閑以及等待磁盤I/O等情況。
內核維持了對核心線程,換頁以及中斷行為的統(tǒng)計數據,而vmstat命令則通過使用knlist子程序和/dev/kmen偽設備驅動器訪問這些數據。磁盤的輸入/輸出統(tǒng)計是通過設備驅動器維持的。對于磁盤,平均傳輸速度是通過使用活躍時間核傳輸信息數目決定的。而活躍時間百分比則是從報告期間驅動器忙的時間量計算出來的。
vmstat命令產生五種類型的報告:
· 虛存行為報告
· fork子進程情況報告
· 每個設備產生的中斷情況報告
· 匯總報告
· 輸入/輸出行為報告
6、sar
sar命令報告CPU的使用情況,I/O以及其它系統(tǒng)行為。sar命令可以收集,報告以及保存系統(tǒng)行為信息。如果沒有指定輸入文件,則sar調用sarc命令訪問系統(tǒng)數據。
用戶可用讓cron命令運行兩個shell腳本(/usr/lib/sa/sa1和/usr/lib/sa2)以提供日統(tǒng)計和報表。在crontab文件/var/spool/cron/crontabs/adm中包括了一些樣本節(jié),用于示范cron要在何時運行這些shell腳本。以這種方式收集到的數據對于確定系統(tǒng)的時間周期特征和決定峰值使用時間是有用的。
但要注意的是,sar命令自己運行時會產生相當數量的讀寫。因此最好在沒有工作量的情況下運行sar統(tǒng)計,看看sar對總的統(tǒng)計數字有多大的影響。
7、topas topas命令用于監(jiān)控各種系統(tǒng)資源,如CPU的使用情況,CPU事件和隊列,內存和換頁空間的使用,磁盤性能,網絡性能以及NFS統(tǒng)計等。它還會報告指派給不同WLM類的進程對系統(tǒng)資源的消耗情況。它還能報告系統(tǒng)中最熱門的進程和工作量管理器(WLM)的熱門類。有關WLM類信息只有在WLM激活時才會顯示。topas命令將熱門進程定義為那些使用大量CPU時間的進程。topas命令沒有作日志的選項,所有信息都是實時的。
topas命令利用System Performance Measurement Interface(SPMI)API獲得有關信息。正是因為通過SPMI API,使系統(tǒng)開銷保持在最小程度。topas命令使用perfstat庫調用訪問perfstat內核擴展。
8、truss truss命令跟蹤一個進程的系統(tǒng)調用、所接收的信號以及招致的機器錯。要檢查的應用程序可在truss命令的命令行中指定,也可將truss命令掛在一個或多個已經在運行的進程上。
AIX調制工具
1、fdpr fdpr命令改進用戶級程序和庫的執(zhí)行時間和對實際內存的使用。fdr命令可以通過不同的操作,如刪除不必要的指令和重組代碼和數據,而實現這樣的目標。fdr命令安裝在目錄/usr/bin下。
fdpr命令在三個不同階段上,對原有的執(zhí)行代碼應用先進的優(yōu)化技術從而為其構筑一個優(yōu)化的可執(zhí)行代碼。這三個階段分別是:
· 在階段1,fdpr創(chuàng)建一個增加了某些裝置(instrumented)的可執(zhí)行程序。原有的可執(zhí)行程序被保存為__ProgramFile.save,而新版本被命名為__ProgramFile.instr。
· 在階段2,fdpr運行該增加了某些裝置的可執(zhí)行程序,并收集摘要(profiling)數據。該摘要數據被保存在一個叫__ProgramFile.prof的文件中。運行執(zhí)行程序時需要為它提供典型的輸入數據,以使fdpr命令能夠找出代碼中可優(yōu)化的部分。
· 在階段3,fdpr命令使用階段2中收集到的重要信息對可執(zhí)行代碼重新排序。這些重新排序涉及到這樣一些任務:
?。?)將那些高頻度執(zhí)行代碼序列包裝在一起。
?。?)對條件分之重新排序,以改進硬件對分之條件的預測。
?。?)將較少使用的代碼部分移出來。
?。?)內嵌一些熱門函數。
?。?)從重排序后的代碼中刪除掉NOP(空操作)指令。
另外,編譯器中還提供了一個-qfdpr標志,用它可使編譯器在執(zhí)行代碼中增加一些額外的信息,以輔助fdpr對該執(zhí)行代碼重新排序。但是,如果使用這個-qfdpr標志,則fdpr也只對那些用-qfdpr標志編譯的模塊重新排序。
2、schedtune schedtune命令可以給抖動、進程掛起、時間片以及線程在鎖上所能輪詢的時間長度等設置準則。
用schedtune,可調整AIX中所設立的一組影響其內存負載控制機制的參數。Schedtune命令用于顯示和修改那些用于檢測系統(tǒng)內存是否在過度使用以致造成抖動的參數。Schedtune命令還能用于修改運行在系統(tǒng)上的進程的懲罰和衰減因子。在root用戶下,用schedtune命令可做下面的事情:
· 決定用于確定抖動的準則。
· 決定哪個準則用于掛起進程。
· 決定在抖動終止后要等待多長時間才重新激活那些先前被掛起的進程。
· 決定被掛起的進程的最小數目。
· 調制調度優(yōu)先級公式。
· 更改時間片數值。
· 決定在一把鎖上輪詢多長時間。
· 將schedtune值復位到它的缺省值。
需要注意的是,所有用schedtune作的修改在系統(tǒng)重啟后都將丟失。為了確保所需的schedtune值在引導時能夠置上,可在/etc/inittab文件中插入適當的schedtune命令。如:schedt:2:once:/usr/samples/kernel/schedtune -s 65536
3、vmtune
vmtune命令負責顯示和調整虛存管理器(VMM)和其它AIX部件使用的參數。系統(tǒng)中的根用戶可動態(tài)修改包括下面這些參數:
· VMM頁替換
· 永久文件讀寫
· 文件系統(tǒng)緩沖區(qū)結構(bufstructs)
· LVM緩沖區(qū)
· 裸輸入/輸出
· 換頁空間參數
· 頁刪除
· 內存固定參數