加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 什么是平均負(fù)載?
    • 平均負(fù)載不等于CPU使用率
    • 常用命令
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

Linux 進(jìn)程管理之負(fù)載均衡

2021/04/22
342
閱讀需 12 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

經(jīng)過(guò)前面的學(xué)習(xí),我們知道一個(gè) task 有如下幾種狀態(tài),但用top時(shí)往往會(huì)以縮寫的形式展現(xiàn),這里我們總結(jié)下。

  • R (TASK_RUNNING),可運(yùn)行狀態(tài)。Linux中的 Ready 和 Running 對(duì)應(yīng)的都是TASK_RUNNING標(biāo)志位,ready 表示進(jìn)程正處在隊(duì)列中,尚未被調(diào)度;running 則表示進(jìn)程正在CPU上運(yùn)行;D (TASK_UNINTERRUPTIBLE),不可中斷的睡眠狀態(tài)。

是正處于內(nèi)核態(tài)關(guān)鍵流程中的進(jìn)程,并且這些流程是不可打斷的,比如最常見(jiàn)的是等待硬件設(shè)備的 I/O 響應(yīng)。處于 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程不能被信號(hào)喚醒,只能由 wakeup 喚醒。既然 TASK_UNINTERRUPTIBLE 不能被信號(hào)喚醒,自然也不會(huì)響應(yīng) kill 命令,就算是必殺 kill -9 也不例外。S (TASK_INTERRUPTIBLE),可中斷的睡眠狀態(tài)。T (TASK_STOPPED or TASK_TRACED),暫停狀態(tài)或跟蹤狀態(tài)。Z (TASK_DEAD - EXIT_ZOMBIE),退出狀態(tài),進(jìn)程成為僵尸進(jìn)程。

什么是平均負(fù)載?

認(rèn)識(shí)一下:

cat /proc/loadavg 
0.18 0.94 0.72 1/486 3569

查看當(dāng)前系統(tǒng)的平均負(fù)載,前三個(gè)數(shù)分別是 1分鐘、5分鐘、15分鐘的平均進(jìn)程數(shù)。第四個(gè)的分子是正在運(yùn)行的進(jìn)程數(shù),分母是進(jìn)程總數(shù);最后一個(gè)最近運(yùn)行的進(jìn)程ID號(hào)。

也可以:

uptime 
22:32:31 up 9 min,  1 user,  load average: 0.18, 0.94, 0.72

load average: 0.18, 0.94, 0.72 //分別是 1分鐘、5分鐘、15分鐘的平均進(jìn)程數(shù)。

我這里的PC是2個(gè)cpu,所以這里的負(fù)載是比較低的(如果平均負(fù)載高于2.0的話說(shuō)明過(guò)載,平均負(fù)載低于2.0就是比較正常的。)

平均負(fù)載是指單位時(shí)間內(nèi),系統(tǒng)處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的平均進(jìn)程數(shù)(即上面的R,D兩個(gè)狀態(tài)的平均進(jìn)程數(shù),很容易忽略D狀態(tài)的進(jìn)程),也就是平均活躍進(jìn)程數(shù),它和 CPU 使用率并沒(méi)有直接關(guān)系。實(shí)際的計(jì)算比較復(fù)雜,感興趣的同學(xué)可以查看源碼 https://github.com/torvalds/linux/blob/master/kernel/sched/loadavg.c 。

平均負(fù)載不等于CPU使用率

通過(guò)上面的介紹我們知道:

平均負(fù)載不僅包括了正在使用 CPU 的進(jìn)程,還包括等待 CPU 和等待 I/O 的進(jìn)程。

CPU使用率,是單位時(shí)間內(nèi) CPU 繁忙情況的統(tǒng)計(jì),跟平均負(fù)載并不一定完全對(duì)應(yīng)。

比如:

CPU 密集型進(jìn)程,使用大量 CPU 會(huì)導(dǎo)致平均負(fù)載升高,此時(shí)這兩者是一致的;I/O 密集型進(jìn)程,等待 I/O 也會(huì)導(dǎo)致平均負(fù)載升高,但 CPU 使用率不一定很高;大量等待 CPU 的進(jìn)程調(diào)度也會(huì)導(dǎo)致平均負(fù)載升高,此時(shí)的 CPU 使用率也會(huì)比較高。

所以這就是有時(shí)通過(guò)top發(fā)現(xiàn)cpu使用率不是很高,但是cat /proc/loadavg時(shí)負(fù)載又很大的原因。

常用命令

top

可以查看系統(tǒng)CPU的狀態(tài),以百分比的形式顯示出來(lái)。

Tasks: 251 total,   1 running, 243 sleeping,   0 stopped,   1 zombie
Mem:   2007724k total,   862108k used,  1145616k free,    18560k buffers
Swap:  1505788k total,        0k used,  1505788k free,   415260k cached
400%cpu  16%user   0%nice   6%sys 377%idle   0%iow   0%irq   0%sirq   0%host
  PID USER         PR  NI VIRT  RES  SHR S[%CPU] %MEM     TIME+ ARGS
 5628 root         20   0 5.9M 3.1M 2.7M R 19.3   0.1   0:00.07 top
 5614 root          0 -20    0    0    0 S  0.0   0.0   0:00.00 [kworker/u9:0]
 5609 root         20   0    0    0    0 S  0.0   0.0   0:00.00 [kworker/3:2]
 5607 root         20   0    0    0    0 S  0.0   0.0   0:00.00 [kworker/u8:2]
 5590 root          0 -20    0    0    0 S  0.0   0.0   0:00.00 [kworker/u9:4]
 5585 root         20   0    0    0    0 S  0.0   0.0   0:00.00 [kworker/u8:3]
 5577 root          0 -20    0    0    0 S  0.0   0.0   0:00.00 [kworker/u9:2]
 5571 root         20   0    0    0    0 S  0.0   0.0   0:00.00 [kworker/3:0]
 5537 root         20   0    0    0    0 S  0.0   0.0   0:00.05 [kworker/u8:1]
 5448 root         20   0    0    0    0 S  0.0   0.0   0:00.67 [kworker/3:1]
  • us(user cpu time):用戶態(tài)使用的cpu時(shí)間比。該值較高時(shí),說(shuō)明用戶進(jìn)程消耗的 CPU 時(shí)間比較多,比如,如果該值長(zhǎng)期超過(guò) 50%,則需要對(duì)程序算法或代碼等進(jìn)行優(yōu)化。sy(system cpu time):系統(tǒng)態(tài)使用的cpu時(shí)間比。ni(user nice cpu time):用做nice加權(quán)的進(jìn)程分配的用戶態(tài)cpu時(shí)間比id(idle cpu time):空閑的cpu時(shí)間比。如果該值持續(xù)為0,同時(shí)sy是us的兩倍,則通常說(shuō)明系統(tǒng)則面臨著 CPU 資源的短缺。wa(wait):等待使用CPU的時(shí)間。hi(hardware irq):硬中斷消耗時(shí)間si(software irq):軟中斷消耗時(shí)間st(steal time):虛擬機(jī)偷取時(shí)間

 

vmstat

vmstat用來(lái)檢測(cè)系統(tǒng)的狀態(tài),包括CPU和內(nèi)存,非常方便系統(tǒng)調(diào)試使用。

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0 1146440 18564 415260    0    0     2     1    0   95  0  0 100 0
 0  0      0 1146476 18564 415260    0    0     0     0    0  384  0  0 100 0
 0  0      0 1146104 18564 415260    0    0     0     0    0  375  0  0 100 0
 0  0      0 1146724 18564 415260    0    0     0     0    0  387  0  0 100 0
 0  0      0 1146848 18564 415260    0    0     0     0    0  369  0  0 100 0

參考: 

https://mp.weixin.qq.com/s/UzmlGu-5n25B0wNScD50Jg

https://mp.weixin.qq.com/s/E5X9U7QIGnLCd4ETn2Ldlw

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

針對(duì)嵌入式人工智能,物聯(lián)網(wǎng)等專業(yè)技術(shù)分享和交流平臺(tái),內(nèi)容涉及arm,linux,android等各方面。

Arm64 ?;厮?>
				</a>
							</li>
						<li id= 查看更多