<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一文理解 Linux 平均負(fù)載,附排查工具!

          共 16298字,需瀏覽 33分鐘

           ·

          2021-07-09 01:07

          公眾號(hào)關(guān)注“杰哥的IT之旅”,

          選擇“星標(biāo)”,重磅干貨,第一時(shí)間送達(dá)!


          什么是平均負(fù)載

          平均負(fù)載可以對(duì)于我們來(lái)說(shuō)及熟悉又陌生,但我們問(wèn)平均負(fù)載是什么,但大部分人都回答說(shuō)平均負(fù)載不就是單位時(shí)間內(nèi)CPU使用率嗎?其實(shí)并不是這樣的,如果可以的話,可以 man uptime 來(lái)了解一下平均負(fù)載的詳細(xì)信息。

          簡(jiǎn)單的說(shuō)平均負(fù)載是指單位時(shí)間內(nèi),系統(tǒng)處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的平均進(jìn)程數(shù),也就是說(shuō)平均活躍進(jìn)程數(shù),它和CPU使用率并沒(méi)有直接關(guān)系。這里解釋一下可運(yùn)行狀態(tài)和不可中斷這兩個(gè)詞。

          可運(yùn)行狀態(tài):

          • 指正在使用CPU或者正在等待CPU的進(jìn)程,我們使用ps命令查看處于R狀態(tài)的進(jìn)程

          不可中斷狀態(tài):

          • 進(jìn)程則是正處于內(nèi)核態(tài)關(guān)鍵流程中的進(jìn)程,并且這些流程是不可中斷的。例如:常見(jiàn)的等待硬件設(shè)備I/O的響應(yīng),也就是我們?cè)趐s命令查看處于D狀態(tài)的進(jìn)程

          比如,當(dāng)一個(gè)進(jìn)程向磁盤讀寫數(shù)據(jù)時(shí),為了保證數(shù)據(jù)的一致性,在得到磁盤回復(fù)前,它是不能被其他進(jìn)程中斷或者打斷的,這個(gè)時(shí)候的進(jìn)程處于不可中斷狀態(tài),如果此時(shí)的進(jìn)程被打斷了,就容易出現(xiàn)磁盤數(shù)據(jù)和進(jìn)程數(shù)據(jù)不一致的問(wèn)題。

          所以,不可中斷狀態(tài)實(shí)際上是系統(tǒng)進(jìn)程和硬件設(shè)備的一種保護(hù)機(jī)制。

          因此,你可以簡(jiǎn)單理解為,平均負(fù)載就是平均活躍進(jìn)程數(shù)。平均活躍進(jìn)程數(shù),直觀上的理解就是單位時(shí)間內(nèi)的活躍進(jìn)程數(shù),但它實(shí)際上是活躍進(jìn)程數(shù)的指數(shù)衰減平均值。既然是平均活躍進(jìn)程數(shù),那么理想狀態(tài),就是每個(gè)CPU上都剛好運(yùn)行著一個(gè)進(jìn)程,這樣每個(gè)CPU都會(huì)得到充分的利用。例如平均負(fù)載為2時(shí),意味著什么呢?

          • 在只有2個(gè)CPU的系統(tǒng)上,意味著所有的CPU剛好被完全占用

          • 在4個(gè)CPU的系統(tǒng)上,意味著CPU有50%的空閑

          • 而在只有1個(gè)CPU的系統(tǒng)上,則意味著有一半的進(jìn)程競(jìng)爭(zhēng)不到CPU

          平均負(fù)載和CPU使用率

          現(xiàn)實(shí)工作中,我們經(jīng)常容易把平均負(fù)載和CPU使用率混淆,所以在這里,我也做一個(gè)分區(qū)。

          可能你會(huì)疑惑,既然平均負(fù)載代表的是活躍進(jìn)程數(shù),那平均負(fù)載高了,不就意味著CPU使用率高嗎?

          我們還是要回到平均負(fù)載的含義上來(lái),平均負(fù)載是指單位時(shí)間內(nèi),處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的進(jìn)程數(shù),所以,它不僅包括了正常使用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ì)很高

          平均負(fù)載案例

          這里我們需要安裝幾個(gè)工具sysstat、stress、stress-ng

          這里Centos的sysstat版本會(huì)老一點(diǎn),最好升級(jí)到最新版本。手動(dòng)rpm安裝或者源碼安裝

          場(chǎng)景一、CPU密集型

          1、運(yùn)行一個(gè)stress命令,模擬一個(gè)CPU使用率100%場(chǎng)景

          $ stress --cpu 1 --timeout 600

          2、開(kāi)啟第二個(gè)終端,uptime查看平均負(fù)載的變化情況

          $ watch -d uptime
           09:40:35 up 80 days, 18:41,  2 users,  load average: 1.621.100.87

          3、開(kāi)啟第三個(gè)終端,mpstat 查看CPU使用率的變化情況

          $ mpstat -P ALL 5 20
          10:06:37 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
          10:06:42 AM  all   31.50    0.00    0.35    0.00    0.00    0.00    0.00    0.00    0.00   68.15
          10:06:42 AM    0    1.20    0.00    0.80    0.00    0.00    0.00    0.00    0.00    0.00   98.00
          10:06:42 AM    1    7.21    0.00    0.40    0.00    0.00    0.00    0.00    0.00    0.00   92.38
          10:06:42 AM    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
          10:06:42 AM    3   17.43    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   82.36
          # -P ALL 表示監(jiān)控所有CPU,后面數(shù)字5 表示間隔5秒輸出一次數(shù)據(jù)

          從第二個(gè)終端可以看到,1分鐘平均負(fù)載增加到1.62,從第三個(gè)終端我們可以看到有一個(gè)CPU使用率100%,但iowait為0,這說(shuō)明平均負(fù)載的升高正式由CPU使用率為100%

          那我們查看是那個(gè)進(jìn)程導(dǎo)致了CPU使用率為100%呢?我們可以使用pidstat來(lái)查看:

          #每5秒輸出一次數(shù)據(jù)
          $ pidstat -u 5 1 
          10:08:41 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
          10:08:46 AM     0         1    0.20    0.00    0.00    0.00    0.20     0  systemd
          10:08:46 AM     0       599    0.00    1.00    0.00    0.20    1.00     0  systemd-journal
          10:08:46 AM     0      1043    0.60    0.00    0.00    0.00    0.60     0  rsyslogd
          10:08:46 AM     0      6863  100.00    0.00    0.00    0.00  100.00     3  stress
          10:08:46 AM     0      7303    0.20    0.20    0.00    0.00    0.40     2  pidstat

          從這里我們可以看到是stress這個(gè)進(jìn)程導(dǎo)致的。

          場(chǎng)景二、I/O密集型進(jìn)程

          1、我們使用stress-ng命令,但這次模擬I/O壓力,既不停執(zhí)行sync:

          #--hdd表示讀寫臨時(shí)文件
          #-i 生成幾個(gè)worker循環(huán)調(diào)用sync()產(chǎn)生io壓力
          $ stress-ng -i 4 --hdd 1 --timeout 600

          2、開(kāi)啟第二個(gè)終端運(yùn)行uptime查看平均負(fù)載情況

          $ watch -d uptime 
           10:30:57 up 98 days, 19:39,  3 users,  load average: 1.710.750.69

          3、開(kāi)啟第三個(gè)終端運(yùn)行mpstat查看CPU使用率

          $ mpstat -P ALL 5 20
          10:32:09 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
          10:32:14 AM  all    6.80    0.00   33.75   26.16    0.00    0.39    0.00    0.00    0.00   32.90
          10:32:14 AM    0    4.03    0.00   69.57   19.91    0.00    0.00    0.00    0.00    0.00    6.49
          10:32:14 AM    1   25.32    0.00    9.49    0.00    0.00    0.95    0.00    0.00    0.00   64.24
          10:32:14 AM    2    0.24    0.00   10.87   63.04    0.00    0.48    0.00    0.00    0.00   25.36
          10:32:14 AM    3    1.42    0.00   36.93   14.20    0.00    0.28    0.00    0.00    0.00   47.16

          從這里可以看到,1分鐘平均負(fù)載會(huì)慢慢增加到1.71,其中一個(gè)CPU的系統(tǒng)CPU使用率升到63.04。這說(shuō)明,平均負(fù)載的升高是由于iowait升高。

          那么我們到底是哪個(gè)進(jìn)程導(dǎo)致的呢?我們使用pidstat來(lái)查看:

          $ pidstat -u 5 1
          Average:      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
          Average:        0         1    0.00    0.19    0.00    0.00    0.19     -  systemd
          Average:        0        10    0.00    0.19    0.00    1.56    0.19     -  rcu_sched
          Average:        0       599    0.58    1.75    0.00    0.39    2.33     -  systemd-journal
          Average:        0      1043    0.19    0.19    0.00    0.00    0.39     -  rsyslogd
          Average:        0      6934    0.00    1.56    0.00    1.17    1.56     -  kworker/2:0-events_power_efficient
          Average:        0      7383    0.00    0.39    0.00    0.78    0.39     -  kworker/1:0-events_power_efficient
          Average:        0      9411    0.00    0.19    0.00    0.58    0.19     -  kworker/0:0-events
          Average:        0      9662    0.00   97.67    0.00    0.19   97.67     -  kworker/u8:0+flush-253:0
          Average:        0     10793    0.00    0.97    0.00    1.56    0.97     -  kworker/3:2-mm_percpu_wq
          Average:        0     11062    0.00   21.79    0.00    0.19   21.79     -  stress-ng-hdd
          Average:        0     11063    0.00    1.95    0.00    1.36    1.95     -  stress-ng-io
          Average:        0     11064    0.00    2.72    0.00    0.39    2.72     -  stress-ng-io
          Average:        0     11065    0.00    1.36    0.00    1.75    1.36     -  stress-ng-io
          Average:        0     11066    0.00    2.72    0.00    0.58    2.72     -  stress-ng-io

          可以發(fā)現(xiàn)是stress-ng導(dǎo)致的

          場(chǎng)景三、大量進(jìn)程的場(chǎng)景

          當(dāng)系統(tǒng)中運(yùn)行進(jìn)程超出CPU運(yùn)行能力時(shí),就會(huì)出現(xiàn)等待CPU的進(jìn)程。

          比如:我們使用stress,但這次模擬8個(gè)進(jìn)程:

          $ stress -c 8 --timeout 600

          我們的系統(tǒng)只有4顆CPU,這時(shí)候要運(yùn)行8個(gè)進(jìn)程,是明顯不夠的,系統(tǒng)的CPU后嚴(yán)重過(guò)載,這時(shí)候負(fù)載值達(dá)到了4點(diǎn)多:

          $  uptime
           10:56:22 up 98 days, 20:05,  3 users,  load average: 4.522.822.67

          接著我們運(yùn)行pidstat來(lái)查看一下進(jìn)程的情況:

          $ pidstat -u 5 1
          Linux 5.0.5-1.el7.elrepo.x86_64 (k8s-m1)     07/11/2019     _x86_64_    (4 CPU)

          10:57:33 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
          10:57:38 AM     0         1    0.20    0.00    0.00    0.00    0.20     1  systemd
          10:57:38 AM     0       599    0.00    0.99    0.00    0.20    0.99     2  systemd-journal
          10:57:38 AM     0      1043    0.60    0.20    0.00    0.00    0.79     1  rsyslogd
          10:57:38 AM     0     12927   51.59    0.00    0.00   48.21   51.59     0  stress
          10:57:38 AM     0     12928   44.64    0.00    0.00   54.96   44.64     0  stress
          10:57:38 AM     0     12929   45.44    0.00    0.00   54.56   45.44     2  stress
          10:57:38 AM     0     12930   45.44    0.00    0.00   54.37   45.44     2  stress
          10:57:38 AM     0     12931   51.59    0.00    0.00   48.21   51.59     3  stress
          10:57:38 AM     0     12932   48.41    0.00    0.00   51.19   48.41     1  stress
          10:57:38 AM     0     12933   45.24    0.00    0.00   54.37   45.24     3  stress
          10:57:38 AM     0     12934   48.81    0.00    0.00   50.99   48.81     1  stress
          10:57:38 AM     0     13083    0.00    0.40    0.00    0.20    0.40     0  pidstat

          可以看出,8個(gè)進(jìn)程搶占4顆CPU,每個(gè)進(jìn)程等到CPU時(shí)間(%wait)高達(dá)50%,這些都超出CPU計(jì)算能力的進(jìn)程,最終導(dǎo)致CPU過(guò)載。

          作者:大胖猴
          鏈接:https://www.cnblogs.com/xzkzzz/p/11164089.html

          公眾號(hào)后臺(tái)回復(fù)「搜索」即可搜索你所需要的文章;
          公眾號(hào)后臺(tái)回復(fù)「wx」添加杰哥微信即可加入讀者交流群;

          推薦閱讀

          原創(chuàng)專輯 | Linux 基礎(chǔ)

          原創(chuàng)專輯 | Linux 實(shí)戰(zhàn)

          杰哥另一個(gè)公眾號(hào),主要分享個(gè)人成長(zhǎng)經(jīng)歷的那點(diǎn)事,歡迎您的關(guān)注。

          瀏覽 56
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  影音先锋在线观看资源男人网 | 国产精品又黄又爽又色无遮挡 | 亚洲女人天堂AV | 天堂中文最新版 | 免费观看黄色一级视频 |