真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Linux中怎么理解系統(tǒng)負(fù)載

這篇文章主要介紹“Linux中怎么理解系統(tǒng)負(fù)載”,在日常操作中,相信很多人在Linux中怎么理解系統(tǒng)負(fù)載問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Linux中怎么理解系統(tǒng)負(fù)載”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),葫蘆島企業(yè)網(wǎng)站建設(shè),葫蘆島品牌網(wǎng)站建設(shè),網(wǎng)站定制,葫蘆島網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,葫蘆島網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

Linux中怎么理解系統(tǒng)負(fù)載

一般在類unix系統(tǒng)上,都會(huì)有系統(tǒng)負(fù)載(load average)這個(gè)指標(biāo),用來(lái)形容系統(tǒng)的繁忙程度,值越大則代表系統(tǒng)越繁忙。

查看負(fù)載

$ uptime
19:59:57 up 29 days,  7:08,  1 user,  load average: 0.57, 0.26, 0.18

我們關(guān)注load average后的3個(gè)值,分別代表1分鐘、5分鐘、15分鐘的系統(tǒng)平均負(fù)載,如果1分鐘值>5分鐘值>15分鐘值,則代表近15分鐘內(nèi)系統(tǒng)壓力越來(lái)越大,反之亦然。

同樣,在top命令的第一行,也能看到系統(tǒng)負(fù)載,它的含義和uptime是一樣的。

負(fù)載是什么

一般來(lái)說,系統(tǒng)線程基本都在這3個(gè)狀態(tài)上:運(yùn)行中,可運(yùn)行,阻塞等待,其中,運(yùn)行中的線程正在CPU上跑,可運(yùn)行的線程等待CPU調(diào)度,而阻塞的線程等待鎖釋放或io完成。

在傳統(tǒng)unix系統(tǒng)上(如BSD),系統(tǒng)負(fù)載由正在運(yùn)行的線程以及可運(yùn)行的線程這2個(gè)部分組成。

它能很好的說明CPU的飽和情況,比如4核的CPU,如果負(fù)載一直高于4,那說明CPU資源飽和了。

而Linux擴(kuò)大了負(fù)載的定義,如下:

Linux負(fù)載由正在運(yùn)行的線程和可運(yùn)行的線程,以及D狀態(tài)的線程(一般是等待io完成)這3個(gè)部分組成。

因?yàn)長(zhǎng)inux認(rèn)為,雖然D狀態(tài)的線程并不消耗CPU資源,但是它會(huì)消耗磁盤、網(wǎng)卡等硬件資源以及鎖這樣的軟件資源,因此它也應(yīng)該被用來(lái)計(jì)算系統(tǒng)負(fù)載,想來(lái)也合理,畢竟系統(tǒng)負(fù)載是用來(lái)描述整個(gè)系統(tǒng)的繁忙程度的,而不僅僅是CPU的。

線程狀態(tài)D

在Linux里面,線程有如下常見狀態(tài):

  • R: 正在運(yùn)行或可運(yùn)行狀態(tài)

  • S: 睡眠狀態(tài),被阻塞等待喚醒

  • D: 不可中斷睡眠狀態(tài),一般是等待io完成

這里面的R與D狀態(tài)的線程會(huì)影響系統(tǒng)負(fù)載,因此,當(dāng)系統(tǒng)負(fù)載較高時(shí),可以通過如下命令了解是哪些線程導(dǎo)致的:

ps -eLo pid,tid,stat,comm | grep -E " R|D"

小實(shí)驗(yàn):將系統(tǒng)負(fù)載升到100

# 使用vfork函數(shù)創(chuàng)建一個(gè)子進(jìn)程,子進(jìn)程如果不調(diào)用exec系統(tǒng)調(diào)用,它的狀態(tài)會(huì)一直是D。

$ cat uninterruptible.c 
int main() {
    vfork();
    sleep(600);
    return 0;
}
# 編譯成可執(zhí)行程序
$ gcc -o uninterruptible uninterruptible.c
# 運(yùn)行100個(gè)程序
$ for i in {1..100}; do ./uninterruptible &; done

等待1分鐘,就會(huì)發(fā)現(xiàn)系統(tǒng)負(fù)載升到了快100,如下:

$ uptime
20:24:42 up 29 days,  7:32,  1 user,  load average: 99.94, 74.82, 35.87
# 可以看到很多D狀態(tài)的進(jìn)程
$ ps -eLo pid,tid,stat,pcpu,wchan:32,comm | grep " D"
3774195 3774195 D     0.0 do_fork                          uninterruptible
3774196 3774196 D     0.0 do_fork                          uninterruptible
3774197 3774197 D     0.0 do_fork                          uninterruptible
3774198 3774198 D     0.0 do_fork                          uninterruptible

如上,通過ps命令可以看到線程狀態(tài),還有一個(gè)wchan字段,它顯示的是線程當(dāng)前被阻塞在什么內(nèi)核函數(shù)上,這能看出一些蛛絲馬跡。

另外,通過/proc/sysrq-trigger可以看到D線程阻塞時(shí)的代碼路徑,如下:

# 寫入一個(gè)w即可,需要root權(quán)限執(zhí)行
$ echo w > /proc/sysrq-trigger
# 然后內(nèi)核會(huì)把D狀態(tài)線程調(diào)用棧輸出到內(nèi)核日志,這可以通過dmesg查看
$ dmesg

Linux中怎么理解系統(tǒng)負(fù)載

這里就能很清楚的看到,是由于vfork系統(tǒng)調(diào)用引起的負(fù)載上升。

之前介紹過bcc工具集里的offcputime工具,它可以用來(lái)繪制offcpu火焰圖,同樣的,診斷高負(fù)載問題時(shí),也可以用這個(gè)工具,傳一個(gè)參數(shù),讓其只關(guān)注D狀態(tài)線程的offcpu行為即可,如下:

# ubuntu安裝bcc工具集
$ sudo apt install bpfcc-tools
# 使用root身份進(jìn)入bash
$ sudo bash
# --state 2用于指定抓取TASK_UNINTERRUPTIBLE即D狀態(tài)線程的offcpu棧
$ offcputime-bpfcc -K --state 2 -f 60  > d_state_offcpu_stack.out
# 繪制為offcpu火焰圖
$ awk '{ print $1, $2 / 1000 }' d_state_offcpu_stack.out | ./FlameGraph/flamegraph.pl --color=io --countname=ms > d_state_offcpu.svg

Linux中怎么理解系統(tǒng)負(fù)載

到此,關(guān)于“Linux中怎么理解系統(tǒng)負(fù)載”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


文章標(biāo)題:Linux中怎么理解系統(tǒng)負(fù)載
分享URL:http://weahome.cn/article/pdooss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部