需求場景:
新入職公司,需要監控方案,於是先把zabbix里有關OS模塊的監控項全部列出來,並一個一個去研究具體的代表的意思;發現其他的都很容易理解,只要有關CPU監控的就難以理解。於是花了一點時間學習一下,找到一篇比較好的博文,然后根據他寫的跟我自己理解的總結成文。
博文地址:http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages (這個看着更有意思,自己翻譯出來沒有那個感覺)
重點參數:
load average: 0.01, 0.07, 0.07
疑問:
1)這個值代表的是什么意思
2)這個值多大代表負載高
3)這個值達到多少該告警
一、查看此平均負載值可使用的方法
1)top命令
[root@rilo ~]# top top - 22:36:45 up 4 days, 11:47, 2 users, load average: 0.00, 0.02, 0.05 Tasks: 116 total, 1 running, 115 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 98.0 id, 1.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1016168 total, 61676 free, 520512 used, 433980 buff/cache KiB Swap: 0 total, 0 free, 0 used. 333104 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 260 root 20 0 0 0 0 S 0.3 0.0 0:16.01 jbd2/vda1-8 5709 root 20 0 157684 2144 1508 R 0.3 0.2 0:00.01 top 5752 mysql 20 0 1167784 295128 5756 S 0.3 29.0 5:10.60 mysqld
2)uptime命令
[root@rilo ~]# uptime 22:51:37 up 4 days, 12:02, 2 users, load average: 0.04, 0.10, 0.07
3)w命令
[root@rilo ~]# w 22:53:03 up 4 days, 12:03, 2 users, load average: 0.01, 0.07, 0.07 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 202.104.136.232 Mon09 30:21m 0.24s 0.24s -bash root pts/1 112.95.38.6 22:34 7.00s 0.00s 0.00s w
二、這三個值分別所代表的意思
load average: 0.04, 0.10, 0.07 這三個值分別對應系統在1分鍾,5分鍾,15分鍾內的平均負載值;
這個數值越低越好,數值高的話代表系統有問題或者機器負載高。但是門檻是什么呢,如何區分什么是好什么是壞的平均負載值呢?什么樣的平均負載值需要我們關注,什么樣的平均負載值需要我們及時去排查問題?
三、相關背景(交通的類比)
單核處理器的情況:
一個單核CPU就如一條單向的公路,假設你是一個橋梁上的交通指揮員,有時候橋上很忙汽車都排成一列通過。然后你想讓別人知道橋梁上的交通情況,一個比較好的衡量標准是有多少汽車在等待在特定的時間內。如果沒有汽車在等待,過來的司機知道過來就可以通過。如果汽車有在等待,過來的司機就知道他們得排隊才能通過。
所以交通指揮員,使用一套數字標識系統:
1)0.00 表示沒有車在橋上,實際上,0.00到1.00之間表示沒有汽車在排隊等待,只要過來就可以通過
2)1.00 表示橋梁上剛好滿負荷,剛剛好
3)超過1.00意味着需要等待,2.00意味着有兩車道的汽車總數,一車道的汽車在橋上,一車道的汽車在等待。3.00意味着有三車道的汽車總數,一車道在橋上,兩車道在等待。

橋相當於CPU,汽車過橋就是使用CPU的過程,等待就是等待使用CPU的過程,Unix將其稱為
運行隊列長度,進程數總和等於正在運行進程數與等待運行數總和。
交通指揮員希望橋梁上永遠不要出現等待,因此,你的CPU負載應該保持在1.00以下;如果偶爾橋上的峰值超過1.00,那么不需要擔心,如果一直在1.00以上,就該擔心了;
因此,你認為最好的負載是1.00?
不完全是,事實上,管理員會在0.7的地方標注一個閥值;
排查階段:在平均負載開始大於0.7的時候,是時候該排查是什么原因導致高負載了
解決階段:當負載高於1.0的時候,就可以找到問題並修復他了
凌晨階段:如果你的負載高於5.0.已經是一個很嚴重的問題了,那么不知道什么情況下機器就會有問題
多核處理器的情況:
當有一個四核處理器的時候,負載3.00也是健康的;在多處理器系統上,負載與可用的核數相關,百分之百用完的標志在單核處理器上是1.00,雙核處理器上是2.00,四核處理器上是4.00。
回到上面的橋梁上的例子,1.00意味着只有一條公路。在這一條公路上,意味着是滿的。在一座兩條公路的橋上,1.00以為者使用了百分之五十,僅僅只有一條路是滿的。在單核處理器是,1.00是滿負載,在雙核處理器上,2.00是滿負載
四、多核與多處理器
對於性能目標,一個具有雙核的處理器與兩個單核處理器是否是一樣的?
是的,這里面有很多關於緩存和處理器之間頻率的關系,盡管有這些東西,為了調整CPU的負載值,核的總數才是最重要的,不管這些核是怎么分布在物理處理器上
我們得出兩個新的規則:
1)核的個數=最大的負載數 :在多核系統上,你的負載不應該超過核的數量
2)核心是核心,核在CPU上是如何分布的並不重要,兩個四核處理器=四個雙核處理器=八個單核處理器;他們都是8個核