1. 指標范圍
1.1 User mode CPU utilization+ System mode CPU utilization
合理值:60-85%,如果在一個多用戶系統中us+sy時間超過85%,則進程可能要花時間在運行隊列中等待,響應時間和業務吞吐量會受損害;us過大,說明有用戶進程占用很多cpu時間,需要進一步的分析其它軟硬件因素;sy過大,說明系統管理方面花了很多時間,說明該系統中某個子系統產生了瓶頸,需要進一步分析其它軟硬件因素。
1.2 Wa(wait)
參考值:小于25%,超過25%的wa的值可以表示子系統可能沒有被正確平衡,也可能是磁盤密集工作負載的結果,系統的磁盤或其它I/o可能有問題,可以通過iostat/SAR –C命令進一步分解分析
1.3 Id(idle)
參考值:大于40,如果r經常大于4,且id經常小于40,表示cpu的負荷很重
1.4 r
參考值:小于4,隊列大于4時,表明系統的cpu或內存可能有問題,如果r經常大于4,且id經常少于40,表示cpu的負荷很重。當隊列變長時,隊列中進程在等待cpu調度執行時所花的時間會變長
1.5 判斷cpu瓶頸的方法
很慢的響應時間(slow response time)
Cpu的空閑時間為零(zero percent idle cpu)
過高的用戶占用cpu時間(high percent user cpu)
過高的系統占用cpu時間(high percent system cpu)
長時間的有很長的運行進程隊列(large run queue size sustained over time)
2. 如何查看cpu利用率
2.1 使用top命令查看
數據來自/proc/stat文件
%us=(Usertime+Nicetime)/CPU時間*100%
%sy=(Systemtime+Hardirqtime+Softirqtime)/CPU時間*100%
%id=(Idletime)/CPU時間*100%
%ni=(Nicetime)/CPU時間*100%
%wa=(Waitingtime)/CPU時間*100%
%hi=(Hardirqtime)/CPU時間*100%
%si=(Softirqtime)/CPU時間*100%
%st=(Stealtime)/CPU時間*100%
備注: top 命令默認情況下,是每 3 秒刷新一次。也可以通過 top -d <刷新時間間隔> 來指定刷新頻率,如top -d 0.1 或top -d 0.01 等。top 執行時,也可以按“s ”鍵,修改時間間隔。
2.2 使用vmstat查看
r表示運行隊列的大小,b表示由于IO等待而的線程數量,in表示中斷的數量,cs表示上下文切換的數量。
2.3 其它查看方式
Iostat、sar -q、sar –u等
3. CPU介紹
3.1 內核中的時間
HZ是系統時鐘在一秒內固定發出時鐘中斷的次數。HZ在編譯內核前是可以進行配置的,因此通過下述命令就可以查看當前系統的時鐘中斷頻率:cat /boot/config-`uname -r` | grep CONFIG_HZ
tick為系統時鐘每“滴答“一次的時間,其值為(1/HZ)秒。也就是連續兩次時鐘中斷之間的時間間隔。
jiffies用來計算自系統啟動以來tick的次數,也就是說系統時鐘每產生一次時鐘中斷,該變量的值就增加一次。
3.2 CPU時間組成
CPU的工作時間由三部分組成:用戶態時間、系統態時間和空閑態時間。具體的組成為:
CPU時間包含User time、System time、Nice time、Idle time、Waiting time、Hardirq time、Softirq time、Steal time
空閑態時間==idle time
用戶態時間==user time+ Nice time。
內核態時間==system time+ Hardirq time+ Softirq time。
user time。指CPU在用戶態執行進程的時間。
system time。指CPU在內核運行的時間。
nice time。指系統花費在調整進程優先級上的時間。
idle time。系統處于空閑期,等待進程運行。
waiting time。指CPU花費在等待I/O操作上的總時間,與ed相似。
steal time。指當前CPU被強制(involuntary wait )等待另外虛擬的CPU處理完畢時花費的時間,此時 hypervisor 在為另一個虛擬處理器服務。
Softirq time 、Hardirq time。分別對應系統在處理軟硬中斷時候所花費的CPU時間。