linux cpu load 详解,理解linux cpu load - 什么时候应该担心了
load average: 0.09, 0.05, 0.01
1
大多數(shù)人對這些數(shù)都有一個模糊的概念:三個數(shù)分別代表了一個隨著更長時間上的一個平均值(1分鐘, 5分鐘, 15分鐘). 并且值越小越好. 越大的數(shù)可能就表明有問題或者已經(jīng)高負(fù)載了. 但是這個閾值是多少? 什么是狀態(tài)好的/壞的負(fù)載?什么時候我們需要關(guān)心這個平均值, 什么時候我們需要趕緊起來修復(fù)它?
首先 需要一點背景來了解什么是load/負(fù)載, 我們將從最簡單的case來看看:一個單核單處理器的機器.
流量
一個單核單處理器的CPU就像一個只有一條車道.假想下你是一個橋梁的工作人員, 有時候,車輛太多了,所以有車輛都排成一條線通過.你想讓后面的人知道這條路上的流量到底是多少.一個相當(dāng)好的指標(biāo)就是:某一時間有多少車在等待.?如果沒有車在等待, 那么來的車就知道,他們可以直接通過. 如果有車在排隊了,司機就知道他們要被延遲通過了.
所以,對收費員而言,用什么數(shù)字來表示呢?
0.00 表示橋上上沒有任何流量. 事實上0.0 到1.00 之間的值都表示這條公路上沒有任何阻塞,大家都可以及時通過.
-?1.00 表示這座橋剛好達到它的最大容量. 目前,工作都很正常,但是如果車更多一點,事情就開始變慢了.
超過1.00表示已經(jīng)有排隊等待了?怎么看? 2.00 表示該有2條車道, 一條車道在橋上, 另外一條車道在排隊等待. 3.00表示該有3條車道, 一條車道在橋上, 另外兩條車道在排隊等待. 諸如此類的.
這就是CPU load的基本含義. 這里的汽車就是進程 (用cpu的時間片, 也就是通過這座橋 或者排隊等待使用cpu). unix使用類似的概念runqueue length來表示:當(dāng)前有多個正在等待的進程和正在執(zhí)行的進程的個數(shù)總和.
作為橋梁操作員, 你肯定不希望你的汽車/進程有任何的等待. 所以你的cpu load理想情況下應(yīng)該是低于1. 偶爾一下的超過1也是可以的. 但是如果一直超過1, 我們就需要擔(dān)心了.
那么理想的cpu load是1.00?
好吧, 并不是. 問題是當(dāng)load是1.00的時候, 已經(jīng)沒有任何空閑空間了. 實際上, 許多系統(tǒng)管理員有一個經(jīng)驗值:0.70:
經(jīng)驗1:需要看下 - 0.70. 如果你的load一直大于0.70, 那么需要抽時間調(diào)查下了.
經(jīng)驗2:修復(fù)它 - 1.00. 如果你的load一直大于1.0,那么趕緊找到問題原因并修復(fù)它,否則你就會在半夜睡覺的時候被叫起來,那就不爽了.
經(jīng)驗3:啊 凌晨3點,WTF- 5.00. 如果你的load一直大于5.00,你可能真的遇上事了.你的任務(wù)可能被掛起了,或者放慢了.并且這會不可預(yù)期的在半夜或者你開會的時候發(fā)生. 必須解決它.
多核處理器怎么說? load說是3.00 但是沒啥問題呀!
對于一個4核處理器的系統(tǒng), 一個load為3.00的時候 依然很健康.
在一個多處理器系統(tǒng)上, load是相對處理器核數(shù)來說的. 100%的使用率在一個單核處理器系統(tǒng)上load是1.00, 在一個雙核處理器上就是2.00, 在一個4核處理器上就是4.00.
回到我們前面的橋梁操作員的例子中, 1.00 表示只有一條道有流量. 在一個只有一條道的橋梁上,意味著它被填滿了. 在一個兩條道的橋梁上, 1.00 表示只有50%的容量 - 只有一條道滿了,另外一條道完全可以繼續(xù)通行(空的).
CPU 也是如此: load 1.00表示: 在單核CPU上100%的占用率, 在一個雙核CPU 上, load 2.00代表100%的占用率.
多核心(multi-core)vs多處理器(multi-processor)
關(guān)于這個話題, 我們來看下多核心和多處器的區(qū)別. 對性能而言, 一個雙核處理器和2個單核處理器是差不多的. 當(dāng)然也有些微妙的關(guān)系比如(cache, 進程在多個處理器上的切換). 除開這些,對于load而言, 核心的個數(shù)才是最重要, 有多少個物理處理器不重要,也不管他們?nèi)绾畏植?
也就是下面的兩個經(jīng)驗:
**核心個數(shù)=最大loa**d: 在一個多核系統(tǒng)中, 你的load不應(yīng)該超過的你的核心數(shù).
核心就是核心: 這些核心在CPU中是如何分布的是不關(guān)心的. 2個4核處理器=4個雙核處理器=1個八核處理器. 這都是8個核心.
譯者注:
多核心 multi-core 一個處理器上可能有多個core 核心. 多個核心可以在一個processor上
多處理器 multi-processor 1個處理器是一個晶元(die) 多個處理器就有多個晶元
參考mac上的配置:
一個晶圓:
拿回家
讓我們來看下uptime的輸出:
~ $ uptime
23:05 up 14 days, 6:08, 7 users, load averages: 0.65 0.42 0.36
1
2
這是一個雙核的CPU, 所以我們還有很多空間, 根本不需要擔(dān)心直到它到了1.7或者更高.
那么這三個數(shù)字都是啥意思? 0.65是最近1分鐘的平均load, 0.42是最近5分鐘的平均load, 0.36是最近15分鐘的平均負(fù)載.
那么這里有2個問題:
1.我該用哪個值? 1分鐘, 5分鐘還是15分鐘?
對于這些數(shù)字而言, 你應(yīng)該關(guān)注5分鐘或者15分鐘的值, 因為CPU 偶爾有spike是比較正常的, 而且一般都會正常工作. 如果最近15分鐘這個值都很高, 那就真的要調(diào)查下了.
2.既然核心數(shù)這么重要, 我怎么知道我的系統(tǒng)有多少個核心?
在linux上可以:
cat /proc/cpuinfo
1
譯者注:
比如我的一個虛擬機:
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產(chǎn)品紅包拿不停!總結(jié)
以上是生活随笔為你收集整理的linux cpu load 详解,理解linux cpu load - 什么时候应该担心了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python6清空屏幕,python:文
- 下一篇: struts2在Action中访问Ses