1. 程式人生 > >【運維】CPU負載

【運維】CPU負載

meminfo process 情況 個數 src 分析 並行處理 大於 name

最近對我的本本(4核8線程)用top命令看系統狀況出現了CPU利用率超過200%的情況,非常詫異,查了下相關資料,把這個問題弄清楚了。
首先來分析下CPU Load

load average: 0.09, 0.05, 0.01

分別是1分鐘、5分鐘、15分鐘的平均Load。
Load這個東西怎麽理解呢,就像一條馬路,有N個車道,如果N個進程進入車道,那麽正好一人一個,再多一輛車就占不到車道,要等有一個車空出車道。
在CPU中可以理解為CPU可以並行處理的任務數,那麽就是“CPU個數 * 核數”,如果CPU Load = CPU個數 * 核數 那麽就是說CPU正好滿負載,再多一點,可能就要出問題了,有任務不能被及時分配處理器,那麽保證性能的話,最好是小於CPU個數 * 核數 *0.7。

查看CPU核數可以通過:grep ‘model name’ /proc/cpuinfo

那麽以哪個平均值為準呢?如果1分鐘平均出現大於CPU個數 * 核數的情況,還不用擔心,如果5分鐘平均也是,那就要警惕了,15分鐘平均也是這樣,就要分析哪裏出問題了,防範於未然
CPU利用率超過100%的問題,也是差不多,top命令應該是把每個核的CPU占用率加起來,算一個和,於是多核情況下會出現超過100%。

另外Context Switch Rate也是個非常值得註意的值,因為線程間切換的代價也是非常高的。

引用一個公式:Context Switch Rate = Interrupt Rate + TPS* N

對於一個多線程的程序,我覺得準備一個控制線程來調度任務是非常必要的,免得線程過於高並發,導致資源的爭用和線程切換帶來性能問題,最好控制並發的線程數基本等於CPU的總核數,減少這個N,獲得更好的處理器性能。

參考了如下幾篇文章:
壓力測試衡量CPU的三個指標:CPU Utilization、Load Average和Context Switch Rate
理解Load Average做好壓力測試
理解 Linux 的處理器負載均值
高性能服務器架構

技術分享
# 總核數 = 物理CPU個數 X 每顆物理CPU的核數 
# 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數

# 查看物理CPU個數
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每個物理CPU中core的個數(即核數)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看邏輯CPU的個數
cat /proc/cpuinfo| grep "processor"| wc -l
技術分享

查看CPU信息(型號)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

查看內 存信息
# cat /proc/meminfo

【運維】CPU負載