1. 程式人生 > >理解CPU負載和CPU使用率

理解CPU負載和CPU使用率

[[email protected]]# top
top - 23:39:41 up 8 days,  6:36,  2 users,  load average: 0.00, 0.01, 0.05
Tasks:  71 total,   1 running,  70 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1016168 total,   386208 free,    69620 used,   560340 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   777376 avail Mem

這兩個從一定程度上都可以反映一臺機器的繁忙程度.

cpu使用率反映的是當前cpu的繁忙程度,忽高忽低的原因在於佔用cpu處理時間的程序可能處於io等待狀態但卻還未釋放進入wait。

平均負載(load average)是指某段時間內佔用cpu時間的程序和等待cpu時間的程序數,這裡等待cpu時間的程序是指等待被喚醒的程序,不包括處於wait狀態程序。

以上分析可以看出,一臺機器很有可能處於低cpu使用率高負載的情況,因此看機器的繁忙程度應該結合兩者,從實際的使用情況觀察,自己的一臺雙核志強2.8GHZ,2G記憶體的機器在平均負載到50左右,cpu使用率才接近100%(應用有不少io操作),這種情況下應用還算流暢,實際訪問延遲不是很高。因此在cpu還空閒的情況下,如何提高io響應是減少負載的關鍵,很多人認為負載到幾十了機器就非常繁忙了,我倒覺得如果這個時候cpu使用率比較低,則負載高可能不能很好說明問題,一旦cpu處理的程序處理完後,那些等待的程序也能立刻得到響應,這種情況下應該優化io讀寫速度。真到cpu使用率一直90%以上,即使平均負載只有個位數(比如某一個程序一直在運算),那機器其實也已經繁忙了~

其實,在前面的文章中,也有寫到cpu使用率低負載高,原因分析 cpu使用率低,但是load很高,load很高的可能是IO

CPU負載的一個類比

判斷系統負荷是否過重,必須理解load average的真正含義。下面,我根據"Understanding Linux CPU Load"這篇文章,嘗試用最通俗的語言,解釋這個問題。
首先,假設最簡單的情況,你的電腦只有一個CPU,所有的運算都必須由這個CPU來完成。
那麼,我們不妨把這個CPU想象成一座大橋,橋上只有一根車道,所有車輛都必須從這根車道上通過。(很顯然,這座橋只能單向通行。)
系統負荷為0,意味著大橋上一輛車也沒有。

系統負荷為0.5,意味著大橋一半的路段有車。

系統負荷為1.0,意味著大橋的所有路段都有車,也就是說大橋已經"滿"了。但是必須注意的是,直到此時大橋還是能順暢通行的。

系統負荷為1.7,意味著車輛太多了,大橋已經被佔滿了(100%),後面等著上橋的車輛為橋面車輛的70%。以此類推,系統負荷2.0,意味著等待上橋的車輛與橋面的車輛一樣多;系統負荷3.0,意味著等待上橋的車輛是橋面車輛的2倍。總之,當系統負荷大於1,後面的車輛就必須等待了;系統負荷越大,過橋就必須等得越久。

CPU的系統負荷,基本上等同於上面的類比。大橋的通行能力,就是CPU的最大工作量;橋樑上的車輛,就是一個個等待CPU處理的程序(process)。
如果CPU每分鐘最多處理100個程序,那麼系統負荷0.2,意味著CPU在這1分鐘裡只處理20個程序;系統負荷1.0,意味著CPU在這1分鐘里正好處理100個程序;系統負荷1.7,意味著除了CPU正在處理的100個程序以外,還有70個程序正排隊等著CPU處理。
為了電腦順暢執行,系統負荷最好不要超過1.0,這樣就沒有程序需要等待了,所有程序都能第一時間得到處理。很顯然,1.0是一個關鍵值,超過這個值,系統就不在最佳狀態了,你要動手干預了。

CPU負載-多處理器

上面,我們假設你的電腦只有1個CPU。如果你的電腦裝了2個CPU,會發生什麼情況呢?
2個CPU,意味著電腦的處理能力翻了一倍,能夠同時處理的程序數量也翻了一倍。
還是用大橋來類比,兩個CPU就意味著大橋有兩根車道了,通車能力翻倍了。

所以,2個CPU表明系統負荷可以達到2.0,此時每個CPU都達到100%的工作量。推廣開來,n個CPU的電腦,可接受的系統負荷最大為n.0。

CPU負載-多核處理器

晶片廠商往往在一個CPU內部,包含多個CPU核心,這被稱為多核CPU。
在系統負荷方面,多核CPU與多CPU效果類似,所以考慮系統負荷的時候,必須考慮這臺電腦有幾個CPU、每個CPU有幾個核心。然後,把系統負荷除以總的核心數,只要每個核心的負荷不超過1.0,就表明電腦正常執行。
怎麼知道電腦有多少個CPU核心呢?
"cat /proc/cpuinfo"命令,可以檢視CPU資訊。"grep -c 'model name' /proc/cpuinfo"命令,直接返回CPU的總核心數。

系統負荷的經驗法則

1.0是系統負荷的理想值嗎?
不一定,系統管理員往往會留一點餘地,當這個值達到0.7,就應當引起注意了。經驗法則是這樣的:
當系統負荷持續大於0.7,你必須開始調查了,問題出在哪裡,防止情況惡化。
當系統負荷持續大於1.0,你必須動手尋找解決辦法,把這個值降下來。
當系統負荷達到5.0,就表明你的系統有很嚴重的問題,長時間沒有響應,或者接近宕機了。你不應該讓系統達到這個值。

對於我的機器,有24個core,那麼,load多少合適呢?

[[email protected] /home/ahao.mah/ALIOS_QA]
#grep 'model name' /proc/cpuinfo | wc -l
24

答案是:

[[email protected] /home/ahao.mah/ALIOS_QA]
#echo "0.7*24" |bc
16.8

最佳觀察時長

最後一個問題,"load average"一共返回三個平均值----1分鐘系統負荷、5分鐘系統負荷,15分鐘系統負荷,----應該參考哪個值?
如果只有1分鐘的系統負荷大於1.0,其他兩個時間段都小於1.0,這表明只是暫時現象,問題不大。
如果15分鐘內,平均系統負荷大於1.0(調整CPU核心數之後),表明問題持續存在,不是暫時現象。所以,你應該主要觀察"15分鐘系統負荷",將它作為電腦正常執行的指標。

REF

相關推薦

理解CPU負載CPU使用率

[[email protected]]# toptop - 23:39:41 up 8 days,  6:36,  2 users,  load average: 0.00, 0.01, 0.05Tasks:  71 total,   1 running,  70 sleeping,   0 sto

理解Linux CPU負載 CPU使用率

CPU負載和 CPU使用率 這兩個從一定程度上都可以反映一臺機器的繁忙程度. cpu使用率反映的是當前cpu的繁忙程度,忽高

圖解cpu loadcpu使用率

最近在做一個性能提升的專案,方案改進前後需要關注cpu相關的一些指標,之前對於cpu load和cpu使用率的概念分的不是太清楚,看了這篇部落格之後感覺挺有意思的,轉給有需要的同學 。 目錄 1. 什麼是Cpu的Load 理想的CPU load是多少 多核心CPU和多處理器 應該

libvirt-qemu-虛擬機器cpu分配cpu熱插拔

(文章來自作者維護的社群微信公眾號【虛擬化雲端計算】)    在libvrit的domain的xml檔案中有兩個地方控制cpu數量和拓撲,一個是cpu,一個是vcpu,其中cpu段控制虛擬機器cpu的模

Linux學習 CPU負載的計算方式理解

Linux運維 Linux學習 Linux入門 Linux基礎 Linux雲計算   Load average的概念源自UNIX系統,雖然各家的公式不盡相同,但都是用於衡量正在使用CPU的進行數量和正在等待CPU的進程數量,一句話就是runable processes的數量。所以Loa

CPU使用率負載,物理CPU個數,核數,線程數

線程 所有 iss 正在 選擇 enter fcm 若有 cpuinfo 當我們使用top命令查看系統的資源使用情況時會看到 load average,如下圖所示。它表示系統在1、5、15分鐘的平均工作負載。那麽什麽是負載(load)呢?它和CPU的利用率又有什麽關系呢

基於JVM原理、JMM模型CPU快取模型深入理解Java併發程式設計

許多以Java多執行緒開發為主題的技術書籍,都會把對Java虛擬機器和Java記憶體模型的講解,作為講授Java併發程式設計開發的主要內容,有的還深入到計算機系統的記憶體、CPU、快取等予以說明。實際上,在實際的Java開發工作中,僅僅瞭解併發程式設計的建立、啟動、管理和通訊等基本知識還是不夠的。一

CentOS下 CPU 負載觀察效能監測

CPU負載和利用率 CPU 的負載和利用率是兩個不同的概念,但是他們都可以在top命令中檢視。CPU利用率顯示的是程式在執行期間實時佔用的CPU百分比,而CPU負載顯示的是一段時間內正在使用和等待使用CPU的平均任務數。CPU利用率高,並不意味著CPU的負載大。兩者之間沒有必然的關係。 &n

Caffe原始碼理解2:SyncedMemory CPUGPU間的資料同步

目錄 寫在前面 成員變數的含義及作用 構造與析構 記憶體同步管理 參考 部落格:blog.shinelee.me | 部落格園 | CSDN 寫在前面 在Caffe原始碼理解1中介紹了Blob類,其中的資料成員有 shared_ptr<SyncedMemory>

基於JVM原理JMM模型CPU快取模型深入理解Java併發程式設計

許多以Java多執行緒開發為主題的技術書籍,都會把對Java虛擬機器和Java記憶體模型的講解,作為講授Java併發程式設計開發的主要內容,有的還深入到計算機系統的記憶體、CPU、快取等予以說明。實際上,在實際的Java開發工作中,僅僅瞭解併發程式設計的建立、啟動、管理和通訊等基本知識還是不夠的。一方面,如果

基於JVM原理JMM模型CPU緩存模型深入理解Java並發編程

可靠的 解決 start 關鍵字 juc .com 失效 接下來 直接 許多以Java多線程開發為主題的技術書籍,都會把對Java虛擬機和Java內存模型的講解,作為講授Java並發編程開發的主要內容,有的還深入到計算機系統的內存、CPU、緩存等予以說明。實際上,在實際的J

shell指令碼監控系統負載CPU記憶體使用情況

在沒有nagios監控軟體的情況下,只要伺服器能上網際網路,就可通過發郵件的方式來提醒管理員系統負載與CPU佔用的使用情況。 一、安裝linux下面的一個郵件客戶端msmtp軟體(類似於一個foxmail的工具)  1、下載安裝:  http://download

理解 Linux CPU 負載 1分5分15分

本帖最後由 ulovko 於 2013-03-06 15:18 編輯 You might be familiar with Linux load averages already. Load averages are the three numbers shown with the uptime and t

Linux下C獲取CPU使用率記憶體網路丟包

在Linux中如果要監視一個程序的執行情況,如檢視它的CPU使用效率和記憶體使用情況,就需要從系統的 /proc目錄的讀取一些系統資訊。然後分析得到結果,proc檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介

深入理解計算機系統-之-數值儲存(一)-CPU大端小端模式詳解

大端與小端 在嵌入式開發中,大端(Big-endian)和小端(Little-endian)是一個很重要的概念。 MSB與LSB 最高有效位(MSB)指二進位制中最高值的位元。在16位元的數字音訊中,其第1個位元便對16bit的字的數值有最大的

【運維】CPU負載

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

Linux系統排查——CPU負載

stdout 0.00 swap stat cpu 隨筆 2.7 bin tasks  本隨筆介紹CPU負載的排查手段。   查看系統負載的工具:uptime,w,都能查看系統負載,系統平均負載是處於運行或不可打擾狀態的進程的平均數,   可運行:運行態,占用CPU,或就

esxi6.x下查看主機內存CPU的分配使用關系命令

主機本文出自 “我還活著呢” 博客,請務必保留此出處http://hujizhou.blog.51cto.com/514907/1931036esxi6.x下查看主機內存和CPU的分配使用關系命令

a=a+1背後的內存模型CPU高速緩存

變量 線程編程 臨時 一份 提高工作效率 的人 str 運行 結果   學過JAVA的人都知道,程序運行過程中的臨時數據,都是從外部存儲設備調入內存(物理內存)中,再進行讀寫操作的。而計算機在執行程序時,對程序的每條指令都是在CPU中執行的,而指令的執行,勢必涉及到對數據的

CPU負載觀察及調優方法

cpu負載觀察及調優方法紅帽6實現無滴答 tick lessinterrupt-driven由軟中斷進行驅動在SMP多CPU架構中,傳統上多CPU對於內存的訪問是總線方式。是總線就會存在資源爭用和一致性問題,而且如果不斷的增加CPU數量,總線的爭用會愈演愈烈,這就體現在4核CPU的跑分性能達不到2核CPU的2