CPU使用率與負載的愛恨情仇

 今天有一個電話面試,面試官問我:CentOS怎麼查看CPU負載?我說:看top的第一行有load average。面試官又問:爲何從這就斷定是負載高呢?依據是什麼呢?而後... 而後我就尷尬了,掛了電話趕忙查資料惡補一下(在這裏吐槽一下本身)。
使用Linux的朋友都知道如何查看Unix/Linux load的值,這邊我也重複一下查看load的方法:
面試

load average 後面三個值表明系統在1分鐘、5分鐘和15分鐘的負載狀況,都知道數字越高表示系統負載越大,第一直覺就是這個系統不行了。那麼到底多高的負載纔算高負載? 咱們又如何去判斷系統是否已經高負載呢?
1. 什麼是load average?
load average的就是必定時間內計算機有多少個active_tasks,也就是說是計算機的任務執行隊列的長度,cpu計算的隊列。
2. load average多少是正常?
既然load是cpu計算的隊列,那就應該和cpu個處理方式和cpu的個數有關係。因此我我的認爲應該按系統識別的cpu個數來肯定load的臨界值,系統識別爲8個cpu,那麼load爲8就是臨界點,高於8就屬於over load了。
3. 什麼叫系統識別CPU個數?
這裏涉及到cpu物理個數和超線程技術的問題。對於單處理器在滿負載的狀況下1.00,則雙處理器的負載滿額的狀況是 2.00,它還有一倍的資源能夠利用。
從性能的角度上理解,一臺主機擁有多核心的處理器與另臺擁有一樣數目的處理性能基本上能夠認爲是相差無幾。固然實際 狀況會複雜得多,不一樣數量的緩存、處理器的頻率等因素均可能形成性能的差別。但即使這些因素形成的實際性能稍有不一樣,其實系統仍是以處理器的核心數量計算負載均值 。這使咱們有了兩個新的法則:
  「有多少核心即爲有多少負荷」法則: 在多核處理中,你的系統均值不該該高於處理器核心的總數量。
  「核心的核心」法則: 核心分佈在分別幾個單個物理處理中並不重要,其實兩顆四核的處理器 等於 四個雙核處理器 等於 八個單處理器。因此,它應該有八個處理器內核。
4. 如何查看系統的CPU個數?
在 Linux 下,可使用從/proc/cpuinfo文件獲取你係統上的邏輯處理器的數量:
[root@localhost ~]# cat /proc/cpuinfo
5.CPU高不等同於load高
在Unix/Linux可能常常會遇到cpu的使用率爲100%,可是load卻不高!這是爲何呢?由於幾乎全部的任務和會和CPU進行交互,可是因爲各個設備的使用頻率不一樣,形成了不能同步進行的問題。好比說,當對硬盤進行讀寫的時候,出現IO的等待時候,事實上cpu已經被切換到別的進程上了。該任務就處於等待狀態,當這樣的任務過多,致使隊列長度過大,這樣就體現到負載過大了,但實際是此時cpu被分配去幹執行別的任務或空閒,所以CPU高不等同於load高,load高也不能於cpu高。
相關文章
相關標籤/搜索