日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
Linux中怎么理解系統(tǒng)負載

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

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

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

一般在類unix系統(tǒng)上,都會有系統(tǒng)負載(load average)這個指標,用來形容系統(tǒng)的繁忙程度,值越大則代表系統(tǒng)越繁忙。

查看負載

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

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

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

負載是什么

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

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

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

而Linux擴大了負載的定義,如下:

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

因為Linux認為,雖然D狀態(tài)的線程并不消耗CPU資源,但是它會消耗磁盤、網卡等硬件資源以及鎖這樣的軟件資源,因此它也應該被用來計算系統(tǒng)負載,想來也合理,畢竟系統(tǒng)負載是用來描述整個系統(tǒng)的繁忙程度的,而不僅僅是CPU的。

線程狀態(tài)D

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

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

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

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

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

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

小實驗:將系統(tǒng)負載升到100

# 使用vfork函數創(chuàng)建一個子進程,子進程如果不調用exec系統(tǒng)調用,它的狀態(tài)會一直是D。

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

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

$ uptime
20:24:42 up 29 days,  7:32,  1 user,  load average: 99.94, 74.82, 35.87
# 可以看到很多D狀態(tài)的進程
$ 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),還有一個wchan字段,它顯示的是線程當前被阻塞在什么內核函數上,這能看出一些蛛絲馬跡。

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

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

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

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

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

# ubuntu安裝bcc工具集
$ sudo apt install bpfcc-tools
# 使用root身份進入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)負載

到此,關于“Linux中怎么理解系統(tǒng)負載”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
當前題目:Linux中怎么理解系統(tǒng)負載
標題來源:http://www.dlmjj.cn/article/pdooss.html