Linux
mpstat
有時會顯示超過 100% 的 CPU 使用率
在我們的其中一台伺服器上執行
mpstat -P ALL
會返回以下內容:06:48:02 AM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s 06:48:02 AM all 15.61 0.08 84.09 7.20 0.56 0.01 0.00 13.97 763.27 06:48:02 AM 0 12.40 0.07 82.12 8.26 0.41 0.01 0.00 13.21 341.40 06:48:02 AM 1 18.82 0.04 86.06 6.15 0.72 0.01 0.00 14.73 421.87
所以總CPU使用率是;
全部 - 122.52%
CPU1 - 116.48%
CPU2 - 126.53%
我是否錯過了 mpstat 的工作原理?我認為總數應該總是加起來 100%?
如果相關,伺服器是 RHEL 5.5。CPU 是 Intel Xeon Dual Core L3406 2.26Ghz
從 mpstat 聯機幫助頁:
間隔參數指定每個報告之間的時間量(以秒為單位)。值 0(或根本沒有參數)表示要報告自系統啟動(引導)以來的處理器統計資訊
執行一次 mpstat 只會為您提供對使用量的對數估計。使用間隔參數執行 mpstat 將為您提供更精確的數字。
這種差異是捨入誤差的累積,它隨著系統活動和正常執行時間而增長。實際顯示的統計數據來自
/proc/stat
和/proc/uptime
。統計是按 USER_HZ 計算的(通常是 100Hz,getconf CLK_TCK
會證實這一點),所以你的解析度只有 1/100 秒;CPU 在 0.01 秒內完成了很多工作。舉個例子:
$ cat /proc/stat; cat /proc/uptime cpu 414821 51578 226720 66535103 73932 0 4548 0 0 0 cpu0 205014 22950 114302 33188492 36369 0 2071 0 0 0 cpu1 209807 28628 112418 33346611 37563 0 2477 0 0 0 <...> 335694.91 665351.03
在我剛上線幾天的工作站上,我們得到了上述數字。如果我們計算 CPU 統計資訊的總時間與正常執行時間的百分比,我們得到
(414821 + 51578 + 226720 + 66535103 + 73932 + 4548) / 335694.91 / 2 100.25%
手冊頁中還有一個(不是很有幫助的)關於程序統計的註釋
ps
。CPU 使用率目前表示為在程序的整個生命週期中執行所花費的時間百分比。這並不理想,並且不符合 ps 在其他方面符合的標準。CPU 使用率加起來不太可能達到 100%