2007 年 4 月 24 日
確定哪些 AIX? 工具可用于監視給定解決方案的中央處理器(Central Processing Unit,CPU),并了解為何某些工具優(yōu)于其他工具。本系列的
第 1 部分討論了優(yōu)化方法和使用 CPU 性能優(yōu)化過(guò)程的重要性。另外還簡(jiǎn)單介紹了一些在優(yōu)化存儲庫時(shí)可以使用的性能工具,對 POWER CPU 進(jìn)行了簡(jiǎn)要介紹,并討論了 POWER 芯片發(fā)展中的體系結構提升如何為 System p? 產(chǎn)品系列的硬件提升做出貢獻。
本系列包含三個(gè)部分,討論中央處理器 (CPU) 性能和監視的各個(gè)方面。本系列的第 1 部分簡(jiǎn)單介紹了如何有效地監視 CPU,討論了性能優(yōu)化的方法,并給出了會(huì )對性能造成影響(正面影響或負面影響)的注意事項。盡管本系列的第 1 部分已經(jīng)詳細說(shuō)明了一些命令,但第 2 部分將更集中于實(shí)際 CPU 系統監視的細節,以及趨勢分析和結果。第 3 部分重點(diǎn)討論通過(guò)主動(dòng)控制線(xiàn)程使用和其他方法來(lái)最大限度地優(yōu)化您的 CPU 性能。在整個(gè)系列文章中,我還將詳細說(shuō)明 AIX? CPU 性能優(yōu)化和監視方面的各種最佳實(shí)踐。
性能優(yōu)化顯然不只是運行一些命令然后觀(guān)察結果。UNIX? 管理員需要知道將哪些工具用于何種目的,以及捕獲數據的最佳方法是什么。有時(shí)候您可能沒(méi)有 30 天時(shí)間來(lái)通過(guò)系統地分析數據確定趨勢,而有時(shí)候甚至都用不了 30 分鐘就能夠準確地判斷出您的瓶頸所在。不管怎么說(shuō),這就是 CPU 監視的主要目的——準確地確定瓶頸。除非所搜集的數據清楚地表明 CPU 是瓶頸,否則并不希望進(jìn)行 CPU 優(yōu)化。事實(shí)上,我們經(jīng)常會(huì )發(fā)現瓶頸與內存或 I/O 相關(guān),而不是與 CPU 相關(guān)的問(wèn)題。
作為 AIX 管理員,最重要的職責之一就是優(yōu)化您的系統。如果不首先監視系統并分析結果,就不能進(jìn)行優(yōu)化。對于長(cháng)期趨勢和短期(接下來(lái)數小時(shí)內必須完成的工作)問(wèn)題均是如此。雖然可以使用特定工具僅對 CPU 進(jìn)行分析,但對于給定環(huán)境,可能要使用在系統上尋找所有可能瓶頸的工具。正如您可能已經(jīng)知道的,CPU 是系統中最快的組件。如果您的 CPU 是瓶頸,將會(huì )對整個(gè)系統的性能造成影響。在我介紹這些工具時(shí),請您注意以下命令已在 AIX 5.3 中進(jìn)行了增強,允許工具使用 Advanced Power Virtualization 報告有關(guān)共享分區的準確統計數據:mpstat、sar、topas 和 vmstat。此外,還對以下基于跟蹤的工具進(jìn)行了更新:Curt、filemon、netpmon、pprof 和 splat。
閑話(huà)少說(shuō),接下來(lái)讓我們開(kāi)始著(zhù)手監視系統。
接下來(lái)我們將討論在所有 UNIX 分發(fā)版本(Solaris 到 AIX)上可用的 UNIX 通用工具。雖然有些輸出內容根據分發(fā)版本不同而有所變化,但大多數標志適用于所有 UNIX 系統。這些標志可幫助您動(dòng)態(tài)地收集信息,但我不會(huì )依賴(lài)其確定歷史趨勢和進(jìn)行分析。
我們首先討論 vmstat。vmstat 報告關(guān)于進(jìn)程、內存、分頁(yè)、被阻塞的 I/O 及總體 CPU 活動(dòng)的信息。雖然這個(gè)工具與虛擬內存相關(guān)(vmstat 中的 vm),但我發(fā)現在主機上運行 vmstat 可以讓我快速而準確地確定 AIX 服務(wù)器上發(fā)生的情況。
您剛剛聽(tīng)到了我們非常不愿意聽(tīng)到的抱怨“為什么系統這么慢?”,需要快速進(jìn)行分析,以確定可能的瓶頸位置。vmstat 是開(kāi)始進(jìn)行此工作的最好工具。有關(guān)運行 vmstat 的示例,請參見(jiàn)
清單 1。
# vmstat 1 System configuration: lcpu=2 mem=3920MB kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 0 0 229367 332745 0 0 0 0 0 0 3 198 69 0 0 99 0 0 0 229367 332745 0 0 0 0 0 0 3 33 66 0 0 99 0 0 0 229367 332745 0 0 0 0 0 0 2 33 68 0 0 99 0 0 0 229367 332745 0 0 0 0 0 0 80 306 100 0 1 97 1 0 0 229367 332745 0 0 0 0 0 0 1 20 68 0 0 99 0 0 0 229367 332745 0 0 0 0 0 0 2 36 64 0 0 99 0 0 0 229367 332745 0 0 0 0 0 0 2 33 66 0 0 99 0 0 0 229367 332745 0 0 0 0 0 0 2 21 66 0 0 99 0 0 0 229367 332745 0 0 0 0 0 0 1 237 64 0 0 99 0 0 0 229367 332745 0 0 0 0 0 0 2 19 66 0 0 99 0 0 0 229367 332745 0 0 0 0 0 0 6 37 76 0 0 99 0
此處要注意的最重要字段有:
r——在所選擇的任意采樣間隔期間的平均可運行內核線(xiàn)程數。
b——采樣期間在虛擬內存中等待隊列的平均內核線(xiàn)程數。r 應該始終高于 b;如果不是,通常意味著(zhù)遇到了 CPU 瓶頸。
fre——可用內存列表的大小。如果此數量并不小,不要太過(guò)擔心。更為重要的是,在此數量小的情況下確定是否進(jìn)行了任何分頁(yè)操作。
pi—— 從頁(yè)面空間讀取的頁(yè)面。
po——寫(xiě)入頁(yè)面空間的頁(yè)面。
CPU 部分: us
sy
id
wa
讓我們看看最后一個(gè)部分(在大部分其他 CUP 監視工具中也提供此信息,不過(guò)使用的標題不同):
us——用戶(hù)時(shí)間
sy——系統時(shí)間
id——空閑時(shí)間
wa——等待 I/O
顯然,此系統沒(méi)有瓶頸。如何確定的呢?讓我們看一看 vmstat 輸出中要分析的更為重要的字段。盡管此系統運行的是 AIX 5.3,將不會(huì )看到物理處理器的數量或使用的可用容量的百分比,因為它不在微分區環(huán)境中運行。如果在微分區環(huán)境中運行,將看到這些額外的字段,因為對 vmstat 進(jìn)行了增強,可以在虛擬環(huán)境和微分區環(huán)境工作。
如果您的 us 和 sys 條目都平均高于 80%,很可能遇到了 CPU 瓶頸。如果上升到了 100%,您的系統就真的太繁忙。如果這些數字很小,但 wa(等待 I/O)很高(通常大于 30),這意味著(zhù)系統上存在 I/O 問(wèn)題,從而導致 CPU 不能到達其最佳工作狀態(tài)。如果 sy 時(shí)間 比 us 時(shí)間 長(cháng),這意味著(zhù)您的系統處理數字的時(shí)間比實(shí)際處理內核數據的時(shí)間短。這也不好。
雖然 vmstat 命令更多地與內存相關(guān),但我發(fā)現可通過(guò)該命令最快而且最準確地確定瓶頸所在。
那用戶(hù)為什么會(huì )對系統抱怨呢?因為系統真的讓用戶(hù)感覺(jué)到運行得很慢。直到我確定了沒(méi)有系統問(wèn)題,而且相鄰的同事沒(méi)有出現問(wèn)題,我才確定了問(wèn)題的根源。因此,我讓他重新啟動(dòng) PC,從而獲得干凈的客戶(hù)機系統。顯然,某個(gè)正在運行的東西造成了 PC 客戶(hù)機故障。
第二天我又接到另一個(gè)電話(huà),于是再次啟動(dòng) vmstat(請參見(jiàn)
清單 2)。
# vmstat 1 System configuration: lcpu=2 mem=3920MB kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 9 0 4200 2746 0 0 0 0 0 0 3 198 69 70 30 0 0 0 4 7 4200 2746 0 0 0 0 0 0 3 33 66 67 31 2 0 0 2 6 4200 2746 0 0 0 0 0 0 2 33 68 65 34 1 0 0 3 9 4200 2746 0 0 0 0 0 0 80 306 100 80 20 0 1 0 2 7 4200 2746 0 0 0 0 0 0 1 20 68 80 20 0 0 0
這又說(shuō)明什么呢?
顯然,此系統處于 CPU Bound 狀態(tài)。沒(méi)有進(jìn)行分頁(yè),也沒(méi)有任何 I/O 問(wèn)題。有大量可運行線(xiàn)程,但沒(méi)有足夠的 CPU 周期來(lái)處理需要完成的工作。我得出這個(gè)結論花了多長(cháng)時(shí)間??jì)H僅五秒鐘。也可以嘗試使用其他實(shí)用工具來(lái)進(jìn)行此工作。
下一個(gè)命令 sar 是 UNIX System Activity Reporting 工具(屬于 bos.acct 文件集)。此命令似乎已經(jīng)成為了 UNIX 世界中永遠存在的一員。此命令實(shí)際上就是將選擇作為其標志的積累活動(dòng)的內容寫(xiě)入到標準輸出。例如,以下命令使用 -u 標志報告 CPU 統計數據。對于 vmstat,如果在虛擬環(huán)境中使用共享分區,將會(huì )報告兩個(gè)其他信息列:physc 和 entc,這兩個(gè)列分別定義分區所使用的物理處理器的數量以及所使用的可用容量。
我在沒(méi)有用戶(hù)的情況下在系統上運行此命令(請參見(jiàn)
清單 3)。除非有批處理作業(yè)在運行,否則就不會(huì )看到大量的活動(dòng)。
# sar -u 1 5 (or sar 1 5) AIX test01 3 5 03/18/07 System configuration: lcpu=2 17:36:53 %usr %sys %wio %idle physc 17:36:54 0 0 0 100 2.00 17:36:55 1 0 0 99 2.00 17:36:56 0 0 0 100 2.00 17:36:57 0 0 0 100 2.00 17:36:58 0 0 0 100 2.00 Average 0 0 0 100 2.00
顯然,此系統也沒(méi)有 CPU 瓶頸。
上面所使用的列與 vmstat 條目輸出類(lèi)似。下表將 sar 與 vmstat 描述內容進(jìn)行關(guān)聯(lián)(請參見(jiàn)
表 1)。
sar vmstat
%usr us
%sys sy
%wio wa
%idle id
我更喜歡使用 vmstat 而不是 sar 的一個(gè)原因是,它可提供 CPU 使用率信息,并能提供有關(guān)內存和 I/O 的總體監視信息。對于 sar,您需要運行獨立的命令才能提取信息。sar 的一個(gè)優(yōu)勢是,它允許捕獲日常信息和運行關(guān)于此信息的報告(不用自己撰寫(xiě)腳本來(lái)進(jìn)行此工作)。它通過(guò)使用名為 System Activity Data Collector 的進(jìn)程實(shí)現此工作,此進(jìn)程實(shí)際是 sar 命令的一個(gè)后端進(jìn)程。在已啟用的情況下,它通常通過(guò) cron(在缺省 AIX 分區上,通常會(huì )發(fā)現將其注釋掉了)以二進(jìn)制格式定期收集數據。
接下來(lái)我們討論特定于 AIX 的命令。編寫(xiě)這些命令的目的是為了讓管理員在分區環(huán)境中監視系統。這些命令在使用 Advanced POWER Virtualization 功能(如共享處理器和微分區)時(shí)尤為有用。
當用戶(hù)首次報告系統運行緩慢時(shí),我決定啟動(dòng) lparstat。lparstat 命令用于報告邏輯分區(Logical Partition,LPAR)信息和相關(guān)統計數據。在 AIX 5L V5.3 中,lparstat 命令將顯示關(guān)于很多 POWER Hypervisor 調用的 Hypervisor 統計數據。lparstat 命令是一個(gè)相對較新的命令,通常用于在共享處理器分區環(huán)境中提供幫助。
因為我還希望看到 POWER Hypervisor 統計數據,因此使用了 -h 標志(如
清單 4 中所示)。
# lparstat -h 1 5 System configuration: type=Dedicated mode=Capped smt=On lcpu=4 mem=3920 %user %sys %wait %idle %hypv hcalls ----- ---- ----- ----- ----- ------ 0.0 0.7 0.0 99.3 44.4 5933918 0.4 0.3 0.0 99.3 44.9 5898086 0.0 0.1 0.0 99.9 45.1 5930473 0.0 0.1 0.0 99.9 44.6 5931287 0.0 0.1 0.0 99.9 44.6 5931274
正如您看到的,從某種程度而言,上面所生成的輸出與 sar 命令相似。請注意,對于在專(zhuān)用環(huán)境或共享 Capped 環(huán)境中運行 AIX 5.2 或 AIX 5.3 的分區,總體 CPU 使用率基于 user、sys、wait 和 idle 值。在采用 Uncapped 模式運行的 AIX 5.3 分區中,使用率應該基于可用容量百分比。
我經(jīng)常使用的另一個(gè)命令是 mpstat 命令(請參見(jiàn)
清單 5),該命令屬于 bos.acct 文件集。這是專(zhuān)門(mén)為 AIX 5.3 創(chuàng )建的工具(與 lparstat 不同),用于顯示分區系統上所有邏輯 CUP 的總體性能值。運行 mpstat 命令時(shí),將顯示兩個(gè)部分的統計數據。第一部分顯示系統配置,在該命令開(kāi)始執行以及對系統配置進(jìn)行了修改時(shí),將顯示這部分信息。第二部分顯示使用率統計數據,此數據將以用戶(hù)指定的時(shí)間為間隔顯示。
# mpstat 1 1 System configuration: lcpu=2 ent=2.0 cpu min maj mpc int cs ics rq mig lpa sysc us sy wa id pc %ec lcs 0 0 0 0 164 83 40 0 1 100 17 0 0 0 100 0.17 8.3 113 1 0 0 0 102 1 1 1 0 100 3830453 66 34 0 0 0 100 .83 41.6
我喜歡使用 mpstat 命令,因為它會(huì )采用非常清晰的格式報告所收集的分區上的每個(gè)邏輯 CPU 的信息。通過(guò)使用 -s 選項,甚至還能夠看到同步多線(xiàn)程(Simultaneous MultiThreading,SMT)線(xiàn)程使用率。lparstat 和 mpstat 命令的缺點(diǎn)在于,二者都需要編寫(xiě)腳本和其他工具來(lái)處理數據格式和圖形輸出。實(shí)際上,您需要編寫(xiě)自己的 shell 腳本。盡管大部分管理員喜歡使用腳本,但他們卻不愿意做重復工作。如果已經(jīng)有了相應的工具來(lái)幫助您分析歷史數據,編寫(xiě)自己的實(shí)用工具就不太明智了。
接下來(lái)我們將了解一些實(shí)用工具,通過(guò)這些工具能以圖形查看分析,還能對歷史數據進(jìn)行分析。盡管完全了解這些工具需要一定的時(shí)間,但這些工具比我們已經(jīng)了解的命令行工具要更為靈活。
接下來(lái)我們討論 procmon(請參見(jiàn)
圖 1)。此實(shí)用工具(在 AIX 5.3 中發(fā)布)不僅提供總體性能統計數據,還允許對實(shí)際運行的處理器進(jìn)行操作。它允許管理員動(dòng)態(tài)地結束進(jìn)程或恢復進(jìn)程。還可以將 procmon 數據導出到文件中,這就使其成為了一個(gè)不錯的數據收集工具。procmon 實(shí)際上作為性能 Workbench 的插件運行,此 Workbench 可通過(guò)使用 perfwb(位于 /usr/bin 中)命令(屬于 bos.perf.gtools.perfwb 文件集)啟動(dòng)。
我之所以喜歡 procmon,是因為它允許對進(jìn)程進(jìn)行操作,而這可以提高系統的性能。雖然這個(gè)工具也有局限性,但我強烈建議您下載并使用此工具(我發(fā)現大多數管理員都不習慣使用此工具)。
應該注意的另一個(gè)工具是 topas。老實(shí)說(shuō),盡管在 AIX 5.3 中有了大幅度提升,但我從來(lái)沒(méi)有遇到過(guò)太多的 topas(屬于 bos.perf.tools 文件集)迷。在進(jìn)行這些更改前,它并不能捕獲歷史數據,也未針對在共享分區環(huán)境中使用而進(jìn)行增強。通過(guò)這些更改,您可以從多個(gè)分區收集性能數據,切實(shí)地簡(jiǎn)化了 topas 作為性能管理和容量規劃工具的功能。topas 的外觀(guān)(請參見(jiàn)
圖 2)與 top 和 monitor(在其他 UNIX 變體中使用)非常相似。topas 是在屏幕上以基于文本的 GUI 格式顯示所有信息的一款實(shí)用工具。采用其缺省模式時(shí),會(huì )顯示主機名、刷新間隔和 CPU、內存及 I/O 信息的綜合情況。
有些新功能還包括允許在虛擬 I/O 服務(wù)器(Virtual I/O Server,VIO Server)上運行 topas。為此,請使用以下命令: # topas -cecdisp
在 LPAR 上,要運行: topas -C
考慮到在 5.3 TL 4 中引入了性能監視功能,topas 使用了從 inittab 自動(dòng)啟動(dòng)的守護進(jìn)程 xmwlm。在 AIX 5.3 的 TL_5 中,缺省會(huì )保留七天的數據,并會(huì )記錄幾乎所有的 topas 數據,除進(jìn)程和工作負載管理器(Workload Manager,WLM)信息外,其中的其他數據會(huì )以交互方式顯示。它使用 topasout 命令來(lái)生成基于文本的報告。topas 在處理其不足方面進(jìn)行了大量的工作,但大多數管理員可能希望使用其他實(shí)用工具——如 nmon。
所有性能工具中,我最喜歡 nmon(不是 IBM“正式”支持的工具)。從 nmon 收集的數據(請參見(jiàn)
圖 3)可從屏幕查看,也可以通過(guò)通常從 cron 運行的報告查看。按照其創(chuàng )建者 Nigel Griffiths 的說(shuō)法,“如果一個(gè)免費工具能夠提供所需要的所有東西,為什么還要使用五個(gè)或六個(gè)工具?”
務(wù)必注意,與已經(jīng)討論的一些其他工具不同,nmon 也可以在 Linux? 上使用,這可切實(shí)地幫助 Linux 贏(yíng)得遇到性能問(wèn)題的 POWER 用戶(hù)群。nmon 最吸引管理員的是,不僅擁有非常高效的前端監視器(如
圖 3 中所示,管理員可以動(dòng)態(tài)調用),而且提供了將數據捕獲到文本文件進(jìn)行圖形報告的功能,因為輸出是 .csv(電子表格)格式(請參見(jiàn)
圖 4)。事實(shí)上,運行 nmon 會(huì )話(huà)一段時(shí)間之后,可以實(shí)際看到以 Excel 電子表格形式良好呈現的表格,可以將此表格提交給高層管理人員或其他技術(shù)團隊以進(jìn)行分析。而且,與 topas 不同,我從來(lái)沒(méi)有看到與此實(shí)用工具關(guān)聯(lián)的任何性能類(lèi)型開(kāi)銷(xiāo)。
接下來(lái)讓我們看一個(gè)簡(jiǎn)單的任務(wù)。首先讓我們告知 nmon 創(chuàng )建文件,對運行進(jìn)行命名,并在 180 個(gè)時(shí)間間隔內每 30 秒進(jìn)行一次數據收集(共計 1.5 個(gè)小時(shí)): # nmon -f -t -r test2 -s 30 -c 180
完成此工作,對文件進(jìn)行排序,如
清單 6 中所示。
# sort -A testsystem_yymmd_hhmm.nmon > testsystem_yymmdd.hhmm.csv
完成后,將 .csv 文件通過(guò) FTP 上傳到工作站,啟動(dòng) nmon 分析器電子表格(確保啟用了宏),然后單擊 analyze nmon data(請參見(jiàn)
圖 4)。
nmon 分析器是一個(gè)非常不錯的工具,是由 Stephen Atkins 編寫(xiě)的,能從 Excel 電子表格以圖形表示數據(CPU、內存、網(wǎng)絡(luò )或 I/O)?;蛟S使其不能成為企業(yè)類(lèi)型的工具的唯一缺陷就是,它缺乏同時(shí)在大量 LPAR 上收集統計數據的能力,因為它不是數據庫(其設計也沒(méi)有考慮成為數據庫)。而這正是 Ganglia(請參見(jiàn)
參考資料中提供的鏈接)能提供幫助的地方,該工具的設計思想實(shí)際上得益于 Nigel Griffiths,因為此工具能夠集成 nmon 分析。
本系列的第 2 部分對很多工具和實(shí)用程序進(jìn)行了深入分析,可以將這些工具和實(shí)用程序用于捕獲和分析運行 AIX 的 System p 服務(wù)器的性能數據。其中一些命令從 UNIX 推出之時(shí)就有了。其中很多命令用于 AIX,其他的則是不受支持的 IBM 實(shí)用工具,但大多數 AIX 管理員都在使用所有這些工具。無(wú)論最喜歡哪個(gè)工具,都需要使用其中一個(gè)來(lái)即時(shí)查看性能活動(dòng),而使用另一個(gè)工具來(lái)捕獲用于進(jìn)行基于歷史的性能優(yōu)化和趨勢及容量規劃分析的數據。有些工具能夠同時(shí)進(jìn)行這兩項工作(如 nmon),但大部分都更為適合進(jìn)行其中某一項工作。我建議您要對這些工具進(jìn)行試驗,不僅要找到最適合您的工具,還要找到能夠為其他人員(不是能夠理解無(wú)休止的 vmstat 顯示信息的系統管理員)提供有價(jià)值信息的工具。