為什么ps看到的CPU使用率能大于100%

面試會遇到的一個問題,ps看到的CPU使用率能大于100%,有時候能準確的回答赠幕,是在排障的過程中確實見過大于100%的,那么ps命令是如果計算進程CPU使用率的呢询筏?CPU利用率高是經常遇到的問題榕堰,常用的系統(tǒng)命令比如sar,pidstat ,mpstat是如何計算CPU使用率的嫌套?對于偶發(fā)的CPU高逆屡,使用ps能準確抓到CPU高的進程嗎?

一踱讨、通俗的理解CPU使用率

CPU(central processing unit)中央處理器是計算機系統(tǒng)的運算和控制中心魏蔗,我們寫一段代碼,經過編譯匯編痹筛,最終翻譯成CPU的指令莺治,CPU就像是一個長跑運動員,我們的代碼就像是指令卡帚稠,CPU拿著指令谣旁,來完成我們要做的事情,比如監(jiān)聽一個端口滋早,讀取網絡上的數據包蔓挖,應用程序返回響應;我們把CPU的計算能力比做運動員單位時間能跑的公里數馆衔,當前CPU利用率比做當前的單位時間運動員跑了多少除以他的最大能力瘟判。為了方便理解,用下面的餅圖做一個形象的展示:


image

當然cpu并不是在單位時間內連續(xù)的完成一件事情角溃,把相同的事情畫到一個餅圖方便展示CPU使用率的種類拷获。

二、CPU使用率計算方法

CPU整體的使用率在文件/proc/stat中


stat文件內容

cpu一行依次代表:
name user nice system idle iowait irrq softirq steal guest guest_nice ,
CPU總時間 = user + system + nice + idle + iowait + irq + softirq
命令中看到的各個過程使用率為各個階段處以總的時間减细,比如
%user = user/CPU總時間
使用stress命令打壓力匆瓜,兩次文件對比,可以看到user狀態(tài)的數字明顯上漲:
stress -c 1


stress測試

top, sar, mpstat這些命令讀取/proc/stat文件未蝌,根據命令參數的時間間隔采樣文件數據驮吱,除以時間間隔,計算中最終的CPU使用率萧吠;對于單個進程的CPU使用情況左冬,存在文件/proc/pid/stat,pidstat 這個命令會讀取這個文件纸型,計算進程使用的CPU使用情況拇砰;

三梅忌、實驗模擬CPU高的場景

通過模擬單核和多核CPU跑滿的情況,看下各個命令的處理結果

1.單核打滿

go語言模擬單核CPU打滿

package main
// CPU test
func main() {
        i := 0
        for {
        //fmt.Println(i)
        i++
        }
}

top命令結果
top-cpu使用圖.png

PS命令結果
ps-cpu使用圖.png
2.多核打滿

多進程代碼

package main
func CPU1()() {
        i := 0
        for {
        //fmt.Println(i)
        i++
        }
}
func CPU2()() {
        i := 0
        for {
        //fmt.Println(i)
        i++
        }
}
// CPU test
func main() {
        go CPU1()
        go CPU2()
        i := 0
        for {
        //fmt.Println(i)
        i++
        }
}

TOP結果圖
top-cpu.png

PS 結果圖
PS-CPU.png
可以看到 main進程占用了超過100% 的CPU
使用top命令查看
top -H
top-H結果.png

htop結果.png

mpstat結果


mpstat.png

四除破、結論

從多核CPU利用率的結果看到牧氮,如果進程使用了多個核,ps命令看到的進程使用率是每個核使用率相加瑰枫,是會超過100%踱葛。
查看man ps中的解釋,ps命令計算CPU使用率的方法是

 %cpu   %CPU      cpu utilization of the process in "##.#" format.  Currently, it is the CPU time used divided by the time the process has been running (cputime/realtime ratio),
 expressed as a percentage.  It will not add up to 100% unless you are lucky.  (alias pcpu).

可以看到光坝,ps命令計算CPU使用率的是用CPU使用時間除以進程存活時間尸诽,ps算的是所有CPU使用率,而不是單個CPU使用率教馆,所以相加是會大于100%的逊谋。
所以,如果要排查CPU使用率高的進程土铺,使用ps并不能準備的反應出當前進程使用的情況胶滋,需要使用類似top,pidstat這種實時統(tǒng)計CPU使用率的工具查看悲敷。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末究恤,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子后德,更是在濱河造成了極大的恐慌部宿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓢湃,死亡現場離奇詭異理张,居然都是意外死亡,警方通過查閱死者的電腦和手機绵患,發(fā)現死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門雾叭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人落蝙,你說我怎么就攤上這事织狐。” “怎么了筏勒?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵移迫,是天一觀的道長。 經常有香客問我管行,道長厨埋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任病瞳,我火速辦了婚禮揽咕,結果婚禮上悲酷,老公的妹妹穿的比我還像新娘套菜。我一直安慰自己亲善,他們只是感情好,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布逗柴。 她就那樣靜靜地躺著蛹头,像睡著了一般。 火紅的嫁衣襯著肌膚如雪戏溺。 梳的紋絲不亂的頭發(fā)上渣蜗,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音旷祸,去河邊找鬼耕拷。 笑死,一個胖子當著我的面吹牛托享,可吹牛的內容都是我干的骚烧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼闰围,長吁一口氣:“原來是場噩夢啊……” “哼赃绊!你這毒婦竟也來了?” 一聲冷哼從身側響起羡榴,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤碧查,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后校仑,有當地人在樹林里發(fā)現了一具尸體忠售,經...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年迄沫,在試婚紗的時候發(fā)現自己被綠了稻扬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡邢滑,死狀恐怖腐螟,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情困后,我是刑警寧澤乐纸,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站摇予,受9級特大地震影響汽绢,放射性物質發(fā)生泄漏。R本人自食惡果不足惜侧戴,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一宁昭、第九天 我趴在偏房一處隱蔽的房頂上張望跌宛。 院中可真熱鬧,春花似錦积仗、人聲如沸疆拘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哎迄。三九已至,卻和暖如春隆圆,著一層夾襖步出監(jiān)牢的瞬間漱挚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工渺氧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旨涝,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓侣背,卻偏偏與公主長得像白华,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子秃踩,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內容