vmstat 命令
第一個要使用的工具是 vmstat 命令,該命令可迅速提供關於各種系統資源和與之相關的性能問題的簡要信息。
# 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 在系統方式下執行一個進程所花時間的百分比。這包括內核進程(kproc)和其他需要訪問內核資源的進程所消耗的 CPU 資源。如果一個進程需要內核資源,它必須執行一個系統調用,並由此切換到系統方式從而使該資源可用。例如,對一個文件的讀或寫操作需要內核資源來打開文件、尋找特定的位置,以及讀或寫數據,除非使用內存映射文件。
- id
id 列顯示了沒有暫掛本地磁盤 I/O 時,CPU 空閒或等待的時間百分比。如果沒有線程可供執行(運行隊列爲空),則系統將分派一個稱爲 wait 的線程(又稱爲空閒 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 的值可以表示磁盤子系統可能沒有被正確平衡,或者這也可能是磁盤密集工作負載的結果。
- us