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