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