安全、誠信、可靠、信心
分類:
處理單元是系統中最快的組件之一。在某一時間對單個程序來說保持 100% 的 CPU 占用率(也就是說,空閑 0%,等待 0%)超過幾秒鐘是相對少見的。甚至在重負載的多用戶系統中,偶爾會出現一些 10 毫秒(ms)的時間段,在其結束時所有線程處于等待狀態。如果監視器長時間地顯示 CPU 占用率為 100%,則很有可能是某個程序陷入了死循環。即使程序“僅僅”是占用較多資源而不是崩潰了,也需要將它識別出來并進行處理。
第一個要使用的工具是 vmstat 命令,該命令可迅速提供關于各種系統資源和與之相關的性能問題的簡要信息。vmstat 命令報告關于內核線程的統計信息,包括處于運行和等待隊列中的、內存中的、頁面調度中的、磁盤中的、中斷、系統調用、上下文切換和 CPU 活動的內核線程。所報告的 CPU 活動是用戶方式、系統方式、空閑時間和等待磁盤 I/O 的百分比細目分類。
作為一個 CPU 監視器,vmstat 命令優于 iostat 命令,因為 vmstat 命令是滾動的,使得它的每報告一行的輸出更容易掃描,并且如果有很多磁盤連接到系統中,由此所涉及的開銷更少。下面的示例可以幫助您識別一個程序失控時或 CPU 過度密集以至于不能在一個多用戶環境中運行時的情況。
# vmstat 2 kthr memory page faults cpu ----- ----------- ------------------------ ------------ ----------- r b avm fre re pi po fr sr cy in sy cs us sy id wa 1 0 22478 1677 0 0 0 0 0 0 188 1380 157 57 32 0 10 1 0 22506 1609 0 0 0 0 0 0 214 1476 186 48 37 0 16 0 0 22498 1582 0 0 0 0 0 0 248 1470 226 55 36 0 9 2 0 22534 1465 0 0 0 0 0 0 238 903 239 77 23 0 0 2 0 22534 1445 0 0 0 0 0 0 209 1142 205 72 28 0 0 2 0 22534 1426 0 0 0 0 0 0 189 1220 212 74 26 0 0 3 0 22534 1410 0 0 0 0 0 0 255 1704 268 70 30 0 0 2 1 22557 1365 0 0 0 0 0 0 383 977 216 72 28 0 0 2 0 22541 1356 0 0 0 0 0 0 237 1418 209 63 33 0 4 1 0 22524 1350 0 0 0 0 0 0 241 1348 179 52 32 0 16 1 0 22546 1293 0 0 0 0 0 0 217 1473 180 51 35 0 14
此輸出顯示了在一個死循環中將程序引入到一個繁忙的多用戶系統中所帶來的效果。頭三個報告(已刪除摘要)表明系統平衡在 50-55% 的用戶、30-35% 的系統和 10-15% 的 I/O 等待處。當循環程序開始運行,所有可用的 CPU 周期都被耗用。因為循環程序不進行 I/O,所以它可以占有前面因為 I/O 等待而未用過的所有周期。更糟的是,這代表當一個有用進程放棄 CPU 時,始終有一個進程準備接管 CPU。因為循環程序的優先級與所有其他前臺進程一樣,所以當另一個進程變得可分派時它也沒必要一定得放棄 CPU。該程序運行大約 10 秒鐘(五個報告),然后由 vmstat 命令報告的活動恢復到較正常的模式。
最佳利用是讓 CPU 在 100% 的時間中工作。這適用于單用戶系統的情況,不需要共享 CPU。總的來說,如果 us + sy 時間低于 90%,則不認為單用戶系統是 CPU 受限制的。但是,如果在一個多用戶系統中 us + sy 時間超過 80%,則進程可能要花時間在運行隊列中等待。響應時間和吞吐量會受損害。
要檢查 CPU 是否是瓶頸,考慮 vmstat 報告中的四個 cpu 列和兩個 kthr(內核線程)列。查看故障列也是值得的:
cpu
在該時間間隔內使用 CPU 時間的百分比細分。cpu 列如下:
us
us 列顯示了用戶方式下所花費 CPU 時間的百分比。UNIX? 進程可以在用戶方式下執行,也可以在系統(內核)方式下執行。當在用戶方式下時,進程在它自己的應用程序代碼中執行,不需要內核資源來進行計算、管理內存或設置變量。
sy
sy 列詳述了 CPU 在系統方式下執行一個進程所花時間的百分比。這包括內核進程(kprocs)和其他需要訪問內核資源的進程所消耗的 CPU 資源。如果一個進程需要內核資源,它必須執行一個系統調用,并由此切換到系統方式從而使該資源可用。例如,對一個文件的讀或寫操作需要內核資源來打開文件、尋找特定的位置,以及讀或寫數據,除非使用內存映射文件。
id
id 列顯示了沒有未決本地磁盤 I/O 時 CPU 空閑或等待的時間百分比。如果沒有線程可以執行(運行隊列為空),系統分派一個叫做 wait 的線程,也稱為 idle kproc。在一個 SMP 系統中,每個處理器都有一個 wait 線程可分派。由 ps 命令(帶有 -k 或 -g 0選項)生成的報告將它確定為 kproc 或 wait。如果 ps 報告顯示這個線程的總計時間較高,這表明存在重要的時間段,其中沒有其他線程準備在 CPU 上運行或等待執行。系統因此大部分時間空閑和等待新任務。
wa
wa 列詳細顯示了暫掛本地磁盤 I/O 和 NFS 加載的磁盤的 CPU 空閑百分比。如果在 wait 運行時至少有一個未完成的磁盤 I/O,該時間就歸為 I/O 等待時間。除非進程使用異常 I/O,否則對磁盤的 I/O 請求會導致調用的進程阻塞(或睡眠),直到請求完成為止。一旦進程的 I/O 請求完成,該進程就放入運行隊列中。如果 I/O 很快完成,該進程可以使用更多的 CPU 時間。
超過 25% 的 wa 的值可以表示磁盤子系統可能沒有被正確平衡,或者這也可能是磁盤密集工作負載的結果。
關于對 wa 進行的更改的信息,請參閱『等待 I/O 時間報告』。
kthr
每秒鐘在采樣間隔時間上對各種隊列中的內核線程數求得的平均值。kthr 列如下:
r
可運行的內核線程平均數,包括正在運行的線程和正在等待 CPU 的線程。如果這個數字大于 CPU 的數目,至少有一個線程要等待 CPU,等待 CPU 的線程越多,越有可能對性能產生影響。
b
每秒 VMM 等待隊列中的內核線程平均數。這包括正在等待文件系統 I/O 的線程,或由于內存裝入控制而暫掛的線程。
如果進程由于內存裝入控制而暫掛,在 vmstat 報告中的阻塞列(b)表明線程數目增加,而不是運行隊列數目增加。
p
對于 vmstat -I,是每秒等待原始設備 I/O 的線程數目。等待文件系統 I/O的線程不包括在這里。
故障
關于進程控制的信息,如陷阱和中斷率。故障列如下:
in
在某一時間間隔中觀測到的每秒設備中斷數。其他信息可在『用 vmstat 命令評估磁盤性能』中找到。
sy
在某一時間間隔中觀測到的每秒系統調用次數。通過明確的系統調用,用戶進程可以使用資源。這些調用指示內核執行調用線程的操作,并在內核和該進程之間交換數據。因為工作負載和應用程序變化很大,不同的調用執行不同的功能,所以不可能定義每秒鐘有多少系統調用才算太多。但是通常來講,在一個單處理器系統上當 sy 列增大到超過每秒鐘 10000 個調用時,則要求進行進一步調查(在一個 SMP 系統上,這個數字為每個處理器每秒鐘 10000 個調用)。一個原因可能是“輪詢”子例程,像 select() 子例程。對這一列,建議進行一個基準評估,給出正常 sy 值的計數。
cs
在某一時間間隔中觀測到的每秒鐘上下文切換次數。物理 CPU 資源細分為每個 10 毫秒的邏輯時間片。假設一個線程被調度運行,它將一直運行直到它的時間片用完、直到被搶先或直到它自愿放棄 CPU 控制權。當給予另一個線程 CPU 控制權時,必須保存前一個線程的上下文或工作環境,并且必須裝入當前線程的上下文。操作系統有一個很有效的上下文切換過程,所以每次切換并不耗費資源。任何上下文切換的顯著增加,如當 cs 比磁盤 I/O 和網絡信息包速率高得多,都應進行進一步調查。
iostat 命令是獲得第一印象的最快方法,不論系統是否存在磁盤 I/O 約束的性能問題(參閱『用 iostat 命令評估磁盤性能』)。這個工具也報告 CPU 統計信息。
下面的示例顯示了 iostat 命令輸出的一部分。第一節顯示了自從系統啟動以來的統計信息摘要。
# iostat -t 2 6 tty: tin tout avg-cpu: % user % sys % idle % iowait 0.0 0.8 8.4 2.6 88.5 0.5 0.0 80.2 4.5 3.0 92.1 0.5 0.0 40.5 7.0 4.0 89.0 0.0 0.0 40.5 9.0 2.5 88.5 0.0 0.0 40.5 7.5 1.0 91.5 0.0 0.0 40.5 10.0 3.5 80.5 6.0
CPU 統計信息列(% user、% sys、% idle 和 % iowait)提供了 CPU 的使用故障。該信息也在 vmstat 命令輸出的標號為 us、sy、id 和 wa 的各列中報告。要獲得各值的更為詳細的解釋,請參閱『vmstat 命令』。也請注意在『等待 I/O 時間報告』中描述的對 %iowait 所做的更改。
sar 命令收集關于系統的統計數據。盡管可以用它來收集一些關于系統性能的有用數據,但 sar 命令會增加系統負載,如果采樣頻率較高就會加劇預先存在的性能問題。但與記帳包相比,sar 命令的干擾更小。系統維護了一系列系統活動計數器,用來記錄各種活動并提供 sar 命令報告的數據。sar 命令不會導致這些計數器被更新或使用;不論 sar 命令是否運行這都會自動進行。根據指定給 sar 命令的采樣速率和采樣次數,它僅僅從這些計數器中提取數據并保存下來。
通過它的許多選項,sar 命令提供了排隊、頁面調度、TTY 和許多其他的統計信息。sar 命令的一個重要功能是它會報告系統級(所有處理器的綜合)的 CPU 統計信息(對一些結果取平均值,以百分比表示,對其他求和),或者報告每個獨立處理器的統計信息。所以這個命令在 SMP 系統上特別有用。
有三種情況可以使用 sar 命令:
要收集并立即顯示系統統計報告,使用下列命令:
# sar -u 2 5 AIX aixhost 2 5 00049FDF4C00 02/21/04 18:11:12 %usr %sys %wio %idle 18:11:14 4 6 0 91 18:11:16 2 7 0 91 18:11:18 3 6 0 92 18:11:20 2 7 0 92 18:11:22 2 7 1 90 平均值 2 6 0 91
這一示例來自于一個單用戶工作站,顯示了 CPU 使用率。
-o 和 -f 選項(對用戶給定的數據文件中進行讀寫)允許您在兩個獨立步驟中將機器的行為可視化。在問題再現期間這些操作消耗很少的資源。通過傳送文件您可以使用單獨的一臺機器來分析數據,因為收集的二進制文件保留了 sar 命令所需的所有數據。
# sar -o /tmp/sar.out 2 5 > /dev/null
上面的命令在后臺運行 sar 命令,以兩秒的時間間隔收集 5 個區間的系統活動數據,并將(未格式化的)sar 數據存儲在 /tmp/sar.out 文件中。對標準輸出使用重定向可以避免屏幕輸出。
下列命令從文件中提取 CPU 信息并將格式化的報告輸出到標準輸出中:
# sar -f/tmp/sar.out AIX aixhost 2 5 00049FDF4C00 02/21/04 18:10:18 %usr %sys %wio %idle 18:10:20 9 2 0 88 18:10:22 13 10 0 76 18:10:24 37 4 0 59 18:10:26 8 2 0 90 18:10:28 20 3 0 77 平均值 18 4 0 78
捕獲的二進制數據文件中保留了報告所需的所有信息。因此可以調查每個可能的 sar 報告。這也允許在一個單處理器系統上顯示 SMP 系統的處理器特定的信息。
sar 命令調用一個叫做 sadc 的進程來訪問系統數據。構造兩個 shell 腳本(/usr/lib/sa/sa1 和 /usr/lib/sa/sa2),用守護程序 cron 運行這兩個腳本,以提供每天的統計信息和報告。在 /var/spool/cron/crontabs/adm crontab 文件中包含了(但注釋掉了)樣本節,以指定守護程序 cron 應該何時運行 shell 腳本。
下面幾行顯示了一個修改過的管理員用戶的 crontab。只除去了數據收集的注釋字符:
#================================================================= # SYSTEM ACTIVITY REPORTS # 8am-5pm activity reports every 20 mins during weekdays. # activity reports every an hour on Saturday and Sunday. # 6pm-7am activity reports every an hour during weekdays. # Daily summary prepared at 18:05. #================================================================= 0 8-17 * * 1-5 /usr/lib/sa/sa1 1200 3 & 0 * * * 0,6 /usr/lib/sa/sa1 & 0 18-7 * * 1-5 /usr/lib/sa/sa1 & 5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 3600 -ubcwyaqvm & #=================================================================
以這種方式收集數據有助于表征在一段時期中系統的使用情況并確定使用高峰時間。
sar 命令中與 CPU 相關的最有用選項有:
sar -P
-P 選項報告指定處理器的每處理器統計信息。通過指定 ALL 關鍵字,可以報告每個單獨的處理器統計信息和所有處理器的平均值。在指定要報告統計信息的標志中,只有 -a、-c、-m、-u 和 -w 這幾個標志與 -P 標志一起使用才有意義的。
下面的示例顯示了當一個 CPU 受限程序在 0 號處理器上運行時的每處理器統計信息:
# sar -P ALL 2 3 AIX aixsmphost 2 5 00049FDF4D01 02/22/04 17:30:50 cpu %usr %sys %wio %idle 17:30:52 0 8 92 0 0 1 0 4 0 96 2 0 1 0 99 3 0 0 0 100 - 2 24 0 7417:30:54 0 12 88 0 0 1 0 3 0 97 2 0 1 0 99 3 0 0 0 100 - 3 23 0 7417:30:56 0 11 89 0 0 1 0 3 0 97 2 0 0 0 100 3 0 0 0 100 - 3 23 0 74平均值 0 10 90 0 0 1 0 4 0 96 2 0 1 0 99 3 0 0 0 100 - 3 24 0 74
每節的最后一行在 cpu 一列中以一個短劃線(-)開始,是所有處理器的平均值。只有當使用 -P ALL 選項時才會顯示一個平均值(-)行。如果指定了處理器,這一行將被除去。最后一節標記了平均值而不是一個時間戳,保留了所有節中處理器特定行的平均值。
下列示例顯示了此時 vmstat 的輸出:
# vmstat 2 5 kthr 內存 頁面 故障 cpu----- ----------- ------------------------ ------------ ------------ r b avm fre re pi po fr sr cy in sy cs us sy id wa 0 0 255636 16054 0 0 0 0 0 0 116 266 5 0 1 99 0 1 1 255733 15931 0 0 0 0 0 0 476 50781 35 2 27 70 0 1 1 255733 15930 0 0 0 0 0 0 476 49437 27 2 24 74 0 1 1 255733 15930 0 0 0 0 0 0 473 48923 31 3 23 74 0 1 1 255733 15930 0 0 0 0 0 0 466 49383 27 3 23 74 0
第一個有編號的行是系統啟動以來的摘要。第二行反映了 sar 命令的啟動,這些報告可通過第三行進行比較。vmstat 命令只能顯示所有處理器的 CPU 平均利用率。這與 sar 命令的 CPU 利用率輸出中的虛線(-)行相當。
sar -u
該命令顯示了 CPU 利用率。如果不指定其他標志,這就是缺省標志。它顯示的信息與 vmstat 或 iostat 命令的 CPU 統計信息一樣。
在下列示例中,啟動了一個復制命令:
# sar -u -P ALL 1 5 AIX aixsmphost 2 5 00049FDF4D01 02/22/04 13:33:42 cpu %usr %sys %wio %idle 13:33:43 0 0 0 0 100 1 0 0 0 100 2 0 0 0 100 3 0 0 0 100 - 0 0 0 100 13:33:44 0 2 66 0 32 1 0 1 0 99 2 0 0 0 100 3 0 1 0 99 - 0 17 0 82 13:33:45 0 1 52 44 3 1 0 1 0 99 2 0 4 0 96 3 0 0 0 100 - 0 14 11 74 13:33:46 0 0 8 91 1 1 0 0 0 100 2 0 0 0 100 3 0 1 0 99 - 0 2 23 75 13:33:47 0 0 7 93 0 1 0 0 0 100 2 0 1 0 99 3 0 0 0 100 - 0 2 23 75 平均值 0 1 27 46 27 1 0 0 0 100 2 0 1 0 99 3 0 0 0 100 - 0 7 11 81
cp 命令在 0 號處理器上工作,其他三個處理器空閑。有關更多信息,請參閱『等待 I/O 時間報告』。
sar -c
-c 選項顯示了系統調用率。
# sar -c 1 3 19:28:25 scall/s sread/s swrit/s fork/s exec/s rchar/s wchar/s 19:28:26 134 36 1 0.00 0.00 2691306 1517 19:28:27 46 34 1 0.00 0.00 2716922 1531 19:28:28 46 34 1 0.00 0.00 2716922 1531 平均值 75 35 1 0.00 0.00 2708329 1527
雖然 vmstat 命令也顯示系統調用率,如果這些系統調用是 read()、write()、fork()、exec() 和其他調用,sar 命令也可以顯示它們。請特別注意 fork/s 一列。如果它較高,則可能需要使用記帳實用程序(如 trace 命令或 tprof 命令)進行進一步調查。
sar -q
-q 選項顯示了運行隊列長度和交換隊列長度。
# sar -q 5 3 19:31:42 runq-sz %runocc swpq-sz %swpocc 19:31:47 1.0 100 1.0 100 19:31:52 2.0 100 1.0 100 19:31:57 1.0 100 1.0 100 平均值 1.3 95 1.0 95
-q 選項可以指出您系統中是否運行太多的作業(runq-sz),或有一個潛在的頁面調度瓶頸。在一個高度事務性的系統中,例如企業資源規劃(ERP),運行隊列可能有幾百個,因為每項事務只使用少量的 CPU 時間。如果頁面調度是問題所在,則運行 vmstat 命令。高的 I/O 等待表明存在嚴重的磁盤爭用活動,或由于內存不足而產生過多的頁面調度。
runq-sz
每秒鐘可運行的平均線程數和運行隊列被占用的時間百分比(% 字段容易出錯)。
swpq-sz
VMM 等待隊列中的平均線程數和交換隊列被占用的時間百分比。(% 字段容易出錯。)
濟南鑒信DATAHELP山東服務器數據恢復中心,濟南承誠鑒信信息技術有限公司 ICP備案編號:魯ICP備16040624號-4
數據恢復公司電話:400-0531-988,0531-55575577 傳真:0531-62399989 數據恢復公司地址:山東省濟南市山大路157號華強電子世界3F
技術支持:數據恢復
服務器數據恢復QQ:1968869
RAID存儲數據恢復QQ:139928669