Linux CPU使用率采集程序編寫

引言(Introduction):從基礎(chǔ)概念出發(fā),手把手抒寫Linux CPU采集程序拔第,并在后面的一個章節(jié)里簡述經(jīng)常出現(xiàn)的問題痊硕。本文主要環(huán)境以centos 7 上進(jìn)行的一系列研究拌喉,其他版本Linux可能會有些出路速那,但總體思路不變。

1 基礎(chǔ)概念(Basic Concept)

1.1 Linux /proc/stat文件介紹 (Linux /proc/stat File Introduce)

????????在Linux系統(tǒng)中尿背,可以用/proc/stat文件來計(jì)算cpu的利用率端仰。這個文件包含了所有CPU活動的信息,該文件中的所有值都是從系統(tǒng)啟動開始累計(jì)到當(dāng)前時刻(換言之田藐,當(dāng)系統(tǒng)重啟荔烧,計(jì)數(shù)器將重置為0)。

file命令查看/proc/stat

? ? ? ??通過"file"命令可知坞淮,該文件并非普通文件茴晋,該文件為內(nèi)核緩沖區(qū)文件陪捷。而該文件的數(shù)據(jù)是實(shí)時變化的回窘,每次打開,內(nèi)容都存在差異市袖,下面我將帶領(lǐng)大家看該文件內(nèi)容結(jié)合http://www.linuxhowtos.org/manpages/5/proc.htm啡直,并給予對應(yīng)說明。

cat命令查看/proc/stat

????????前面幾列以cpu開頭的每個邏輯cpu的單獨(dú)情況苍碟,從序號0開始酒觅,往后遞增,而第一行微峰,無序號的舷丹,為總情況,這些數(shù)據(jù)都是以clock_tick為單位記錄的蜓肆,這里的clock_tick在絕大多數(shù)機(jī)器上是1/100秒即10ms颜凯。對于特定的機(jī)器可以通過sysconf(_SC_CLK_TCK)函數(shù)來獲得clock_tick(ps: 這個函數(shù)屬于linux內(nèi)核中unistd.h文件中提供的方法谋币,運(yùn)行前需包含該庫文件);即前五行所表示的是:總CPU使用情況症概,和該機(jī)器的4顆邏輯CPU的分別情況蕾额。其他的具體的每一列信息為:

? ??cpu user nice system idle iowait irq softirq steal guest guest_nice

前五行具體說明(有時候未必是前五行,根據(jù)具體CPU邏輯數(shù)而定):

? ? ? ? user: 用戶態(tài)的CPU時間彼城。(Time spent in user mode)

? ? ? ? nice: 低優(yōu)先級程序所占用的用戶態(tài)的cpu時間诅蝶。(Time spent in user mode with low priority(nice))

????????system: 系統(tǒng)態(tài)的CPU時間。(Time spent in system mode)

????????idle: CPU空閑的時間募壕,不包含IO等待调炬。(Time spent in the idle task. This value should be USER_HZ times the second entry in the/proc/uptime?pseudo-file.)

????????iowait: 等待IO響應(yīng)的時間。(Time waiting for I/O to complete. This value is not reliable.)

????????irq: 處理硬件中斷的時間舱馅。(Time servicing interrupts)

? ? ????softirq: 處理軟中斷的時間筐眷。(Time servicing softirqs)

????????steal: 其他系統(tǒng)所花的時間。(Stolen time, which is the time spent in other operating systems when running in a virtualized environment)

????????guest: 運(yùn)行時間為客戶操作系統(tǒng)下的虛擬CPU控制习柠。(Time spent running a virtual CPU for guest operating systems under the control of the Linux kernel)

????????guest_nice: 低優(yōu)先級程序所占用的用戶態(tài)的cpu時間匀谣。(Time spent running a niced guest ,virtual CPU for guest operating systems under the control of the Linux kernel)

后面七行的具體說明:

? ??????intr:系統(tǒng)啟動以來的所有interrupts的次數(shù)情況资溃,每個數(shù)對應(yīng)一個特定的中斷自系統(tǒng)啟動以來所發(fā)生的次數(shù)武翎,可參考/proc/interrupt。(This line shows counts of interrupts serviced since boot time, for each of the possible system interrupts. The first column is the total of all interrupts serviced including unnumbered architecture specific interrupts; each subsequent column is the total for that particular numbered interrupt. Unnumbered interrupts are not shown, only summed into the total.)

????????ctxt: 系統(tǒng)上下文切換次數(shù)溶锭。(The number of context switches that the system underwent.)

????????btime:啟動時長(單位:秒)宝恶,從Epoch(即1970零時)開始到系統(tǒng)啟動所經(jīng)過的時長,每次啟動會改變趴捅。(boot time, in seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).)

????????processes:系統(tǒng)啟動后所創(chuàng)建過的進(jìn)程數(shù)量垫毙。(Number of forks since boot.)

????????procs_running:處于Runnable狀態(tài)的進(jìn)程個數(shù).(Number of processes in runnable state. (Linux 2.5.45 onward.))

????????procs_blocked:處于等待I/O完成的進(jìn)程個數(shù)。(Number of processes blocked waiting for I/O to complete.)

? ??????softirq:軟中斷情況拱绑,第一列表示所有CPU的軟中斷總和综芥,其他的幾列表示特定的軟中斷情況,具體參考/proc/softirq(This line shows the number of softirq for all CPUs. The first column is the total of all softirqs and each subsequent column is the total for particular softirq.)

1.2 CPU計(jì)算公式 (CPU Compute Formula)

? ??????CPU時間=user+system+nice+idle+iowait+irq+softirq

? ??????CPU空閑率=(idle2-idle1)/(cpu2-cpu1)*100

? ??????CPU使用率=1-CPU空閑率

說明:

? ? ? ? /proc/stat時間一直在累積猎拨,所以可以在該秒獲取該文件內(nèi)容后膀藐,sleep 1000 下一秒再獲取該文件內(nèi)容,按照對應(yīng)公式红省,即可得出該秒內(nèi)CPU的平均時間情況额各。

2 實(shí)現(xiàn)說明 (Implement)

數(shù)據(jù)獲取

??按照第一章節(jié)說明,實(shí)際上我們只需要讀取第一行數(shù)據(jù)即可吧恃。

保存數(shù)據(jù)

按照公式虾啦,拼接redis命令,單純存儲總時間和空閑時間,key為對應(yīng)的時間傲醉,value為總時間_空閑時間针饥。

獲取利用率百分比

獲取前一秒的數(shù)據(jù)和當(dāng)前秒的數(shù)據(jù),帶入該函數(shù)需频,獲得前一秒到該秒時間段的平均CPU利用率丁眼。

3 可能存在的問題說明 (Possible Problems)

3.1 重啟后導(dǎo)致CPU利用率不準(zhǔn)確 (Reboot Make CPU Percent Incorrect)

????說明:當(dāng)linux重啟后,CPU計(jì)數(shù)器置0昭殉,導(dǎo)致正常的公式無法被使用苞七。

? ? 解決方法:判斷時間更早的點(diǎn)總CPU時間是否小于現(xiàn)在的點(diǎn)的總CPU時間,如果不是挪丢,則剔除該點(diǎn)數(shù)據(jù)蹂风。

3.2 快照恢復(fù)后導(dǎo)致CPU利用率不準(zhǔn)確 (Snapshot Make CPU Percent Incorrect)

? ? 說明:快照恢復(fù)后實(shí)際做了兩件事:重啟+時間同步宿主機(jī),前者按照3.1的處理乾蓬,時間同步必須保證整個集群時間一致惠啄,否作會出現(xiàn)存入了01:00、01:02任内、01:03....02:00的數(shù)據(jù)撵渡,快照執(zhí)行完又回到了01:00的點(diǎn)開始采集數(shù)據(jù),且數(shù)據(jù)CPU時間無限兴类隆(因?yàn)橹貑⒘耍┣骶啵瑢?dǎo)致帶入公式計(jì)算01:00到02:00利用率存在問題。

? ? 解決方法:計(jì)算01:00到02:00該分鐘的利用率越除,將總CPU時間相減节腐,是否約等于1分鐘,如果不約等于1分鐘摘盆,則該時間段數(shù)據(jù)棄用翼雀。

4 展示圖


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市孩擂,隨后出現(xiàn)的幾起案子狼渊,更是在濱河造成了極大的恐慌,老刑警劉巖肋殴,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囤锉,死亡現(xiàn)場離奇詭異,居然都是意外死亡护锤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進(jìn)店門酿傍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烙懦,“玉大人,你說我怎么就攤上這事赤炒÷任觯” “怎么了亏较?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掩缓。 經(jīng)常有香客問我雪情,道長,這世上最難降的妖魔是什么你辣? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任巡通,我火速辦了婚禮,結(jié)果婚禮上舍哄,老公的妹妹穿的比我還像新娘宴凉。我一直安慰自己,他們只是感情好表悬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布弥锄。 她就那樣靜靜地躺著,像睡著了一般蟆沫。 火紅的嫁衣襯著肌膚如雪籽暇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天饭庞,我揣著相機(jī)與錄音图仓,去河邊找鬼。 笑死但绕,一個胖子當(dāng)著我的面吹牛救崔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捏顺,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼六孵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了幅骄?” 一聲冷哼從身側(cè)響起劫窒,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拆座,沒想到半個月后主巍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挪凑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年孕索,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躏碳。...
    茶點(diǎn)故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡搞旭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肄渗,我是刑警寧澤镇眷,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站翎嫡,受9級特大地震影響欠动,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惑申,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一具伍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧硝桩,春花似錦沿猜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衙伶,卻和暖如春祈坠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矢劲。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工赦拘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芬沉。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓躺同,卻偏偏與公主長得像,于是被迫代替她去往敵國和親丸逸。 傳聞我的和親對象是個殘疾皇子蹋艺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評論 2 355