<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:57811|
      • 收錄網站:279872|

      IT精英團

      平均負載和CPU利用率有什么區別?

      平均負載和CPU利用率有什么區別?

      瀏覽次數:
      評論次數:
      編輯: 樂詠
      信息來源: ITPUB
      更新日期: 2022-09-16 15:34:01
      摘要

      大家好,我是樹哥。在性能優化中,我們經常會關注CPU平均負載這個指標。但如果讓你來跟我解釋一下什么是平均負載,你能說得清楚嗎?它跟CPU使用率有什么區別?我想可能很多人都數不清楚,今天我們就來

      • 正文開始
      • 相關閱讀
      • 推薦作品

      大家好,我是樹哥。

      在性能優化中,我們往往會關注平均CPU負載。但是如果你能給我解釋一下平均負載是多少,你能解釋清楚嗎?它和CPU利用率有什么區別?我覺得可能很多人都數不清楚。今天我們來設定一下平均CPU負載指數!

      平均負載和CPU利用率有什么區別?

      Linux 進程狀態

      為了理解平均CPU負載,我們還需要從Linux進程狀態開始。

      在Linux源代碼的fs/proc/array.c文件中,它定義了進程的七種狀態,如下:

      /*

      *的Thetaskstatearrayisastrange“位圖”

      *原因睡眠。因此“運行”是零,并且

      *您愿意與其他人組合

      *simplebittests。

      */

      static const char * const task _ state _ array[]={

      r(正在運行)',/*0*/

      S(sleeping)',/*1*/

      D(disksleep)',/*2*/

      t(已停止)',/*4*/

      t(tracingstop)',/*8*/

      X(dead)',/*16*/

      z(僵尸)',/*32*/

      };

      第一種狀態:TASK_RUNNING 可執行狀態,縮寫 R。

      這種狀態表示該進程可以在CPU上運行,即具備運行的條件。但是,可能有多個進程同時運行,但并不意味著該進程已經在運行。TASK_RUNNING中的進程將被放入CPU的可執行隊列中,然后由進程調度器分配給其中一個CPU運行。

      很多操作系統教科書把在CPU上執行的進程定義為運行狀態,而把可以執行但沒有被調度執行的進程定義為讀取。

      Y 狀態,這兩種狀態在 Linux 系統下統一為 TASK_RUNNING 狀態。

      第二種狀態:TASK_INTERRUPTIBLE 可中斷的睡眠狀態,縮寫 S。

      該狀態的進程表示因為等待某某時間的發生而被掛起,例如:等待 socket 連接、等待信號量等等。這些進程會被放入對應事件的等待隊列中,當這些事件發生時,對應等待隊列中的一個或多個進程將被喚醒。

      通過 ps 命令我們可以看到,絕大多數進程都處于 TASK_INTERRUPTIBLE 狀態。這是因為由于 CPU 只有那么幾個,而進程卻動輒幾百上千,因此絕大多數進程在某個時刻都是處于睡眠狀態的。如果不是絕大多數進程都在睡眠,CPU 是無法響應得過來的。

      第三種狀態:TASK_UNINTERRUPTIBLE 不可中斷睡眠狀態,縮寫 D。

      該狀態與 TASK_INTERRUPTIBLE 狀態類似,進程處于睡眠狀態,但唯一不同的點是該進程是不可中斷的。不可中斷指的并不是 CPU 不響應外部硬件的中斷,而是指進程不響應異步信號。

      絕大多數情況下,進程處在睡眠狀態時,總是應該能夠響應異步信號的。即你能夠通過 kill -15 pid方式傳遞異步信號,程序可以做出響應。但有時候你會驚奇地發現,kill -9竟然殺不死一個正在睡眠的進程了,這時候有可能就是該進程處于不可中斷睡眠狀態了!

      TASK_UNINTERRUPTIBLE 狀態存在的意義就在于:內核的某些處理流程是不能被打斷的,例如:在進程對某些硬件進行操作時,如果產生中斷的話會導致進程與硬件設備交互被打斷,使得設備陷入不可控狀態。這種情況下的 TASK_UNINTERRUPTIBLE 狀態總是非常短暫的,通過 ps 命令基本上不可能捕捉到。

      第四、五種狀態:TASK_STOPPED 暫停狀態、TASK_TRACED 狀態,縮寫 T。

      當我們向進程發送一個 SIGSTOP 信號時,它就會因響應該信號而進入 TASK_STOPPED 狀態。除非該進程本身處于 TASK_UNINTERRUPTIBLE 狀態而不響應信號)。向進程發送一個 SIGCONT 信號,可以讓其從 TASK_STOPPED 狀態恢復到 TASK_RUNNING 狀態。

      第六種狀態:TASK_DEAD - EXIT_ZOMBIE 退出狀態,縮寫 Z。

      進程退出之后,進程所占有的所有資源將被回收,隨后該進程就被成為僵尸進程(Zombie)。一般情況下是子進程先于父進程退出,并且父進程沒有調用 wait 或 waitpid 回收子進程。此時子進程即處于僵尸狀態。

      第七種狀態:TASK_DEAD - EXIT_DEAD 退出狀態,縮寫 X。

      進程被置于 EXIT_DEAD 退出狀態,這意味著接下來的代碼立即就會將該進程徹底釋放。一般情況下 EXIT_DEAD 狀態是非常短暫的,幾乎不可能通過 ps 命令捕捉到。

      看完了 Linux 進程的 7 種狀態,是不是有點懵了?其實你只需要記住 Linux 有這 7 種狀態,其中最重要的是 RUNNING 狀態、UNINTERRUPTIBLE 狀態就可以了。

      我們總結一下 Linux 的 7 種進程狀態:

      • TASK_RUNNING 可執行狀態,縮寫 R。
      • TASK_INTERRUPTIBLE 可中斷的睡眠狀態,縮寫 S。
      • TASK_UNINTERRUPTIBLE 不可中斷睡眠狀態,縮寫 D。
      • TASK_STOPPED 暫停狀態、TASK_TRACED 狀態,縮寫 T。
      • TASK_DEAD - EXIT_ZOMBIE 退出狀態,縮寫 Z。
      • TASK_DEAD - EXIT_DEAD 退出狀態,縮寫 X。

      平均負載的定義

      平均負載的定義是:單位時間內,系統中處于可運行狀態和不可中斷狀態的平均進程數。這里的可運行狀態和不可中斷狀態,指的就是上文說到的進程狀態。從平均負載的定義來看,其與進程所處的狀態有關系,因此我們后續分析平均負載的時候,要以該定義為基礎去分析。

      對于有 4 核 CPU 的機器,如果一共運行了 4 個進程,那么每個 CPU 都運行了 1 個進程,此時所有的 CPU 都剛好被完全占用。

      而如果只有 2 個進程,那么意味著 CPU 有 50% 的空閑。而如果有 8 個進程,那么意味著 CPU 超載了,平均負載達到了 2,但單位時間內單個 CPU 需要運行 2 個進程。

      我們可以通過讀取 /proc/cpuinfo文件獲取系統 CPU 信息,如下所示:

      $ grep 'model name' /proc/cpuinfo | wc -l2

      當平均負載比 CPU 個數還多的時候,就表示系統已經出現了負載。一般情況下,負載不超過 70% 的情況下都是正常的。

      很多人都會將 CPU 平均負載與 CPU 使用率搞混,實際上它們有一定關聯,但不是同一個東西。

      平均負載是指單位時間內,處于可運行狀態和不可中斷的進程數。從其定義可以知道,其不僅包括了正在使用 CPU 的進程,還包括等待 CPU 和等待 I/O 的進程。而 CPU 使用率指的是正在使用 CPU 的進程,由此可見它們兩者是不同的。

      如果是 CPU 密集型的進程,因為進程大量使用 CPU,因此平均負載會上升,CPU 使用率會上升。但如果是 I/O 密集型進程,有很多進程在等待 I/O 操作,此時進程處于不可中斷狀態,因此平均負載會升高,但是 CPU 使用率卻不一定很高。

      由此可見,平均負載與 CPU 使用率有一定關聯,但并沒有絕對的關系。

      如何查看平均負載?

      一般來說,我們可以通過 topuptime命令來監控服務器的平均負載。

      在服務器命令行輸入 top即可查看到當前系統的負載情況,如下圖所示。

      16611630372239

      上圖中平均負載的 3 個數值分別代表 1 分鐘、5 分鐘、15 分鐘系統的平均負載情況。通過這三個數值的變化,我們可以知道系統最近一段時間的壓力變化趨勢。例如:load average: 15.00, 10.75, 3.25表示過去 1 分鐘負載為 15,過去 5 分鐘負載為 10.75,過去 15 分鐘負載為 3.25,可以看到其平均負載壓力是越來越大的。

      top命令輸出的信息非常多,有時候會干擾我們的視野。所以如果你只需要看系統負載情況,那么你可以用 uptime命令,如下圖所示。

      -w438

      uptime命令只輸出了一行信息,非常簡潔。

      如果你需要持續地查看平均負載的變化,那么可以用如下命令。該命令會會持續輸出最新的負載信息,并高亮變化的部分。

      watch -d uptime
      -w499

      總結

      本文首先介紹了 Linux 進程的 7 種狀態,分別是:

      • TASK_RUNNING 可執行狀態,縮寫 R。
      • TASK_INTERRUPTIBLE 可中斷的睡眠狀態,縮寫 S。
      • TASK_UNINTERRUPTIBLE 不可中斷睡眠狀態,縮寫 D。
      • TASK_STOPPED 暫停狀態、TASK_TRACED 狀態,縮寫 T。
      • TASK_DEAD - EXIT_ZOMBIE 退出狀態,縮寫 Z。
      • TASK_DEAD - EXIT_DEAD 退出狀態,縮寫 X。

      隨后,我們介紹了平均負載指標的定義,即:單位時間內,系統中處于可運行狀態和不可中斷狀態的平均進程數。

      接著,我們將其與 CPU 使用率做了對比,知道兩者的區別在于:平均負載不僅包括了正在使用 CPU 的進程,還包括等待 CPU 和等待 I/O 的進程。而 CPU 使用率指的是正在使用 CPU 的進程,由此可見它們兩者是不同的。

      最后,我們介紹了查看平均負載指標的 2 個命令,即 topuptime命令。如果需要持續關注平均負載的變化,那么可以使用 watch -d uptime命令持續輸出,并高亮變化的部分。

      參考資料

      • 從源碼角度分析!進程狀態?理解 Linux 進程?看云

      • (13 條消息) Linux 進程狀態解析 之 R、S、D、T、Z、X (主要有三個狀態)_sdkdlwk 的博客 - CSDN 博客_進程 d 狀態

      • Linux 進程狀態 (ps stat) 詳解 - 火星小編 - 博客園



      標簽:進程 狀態 負載
      圖系列中推薦算法的召回與粗排實踐
      ? 上一篇 2022-09-16
      當老板讓我從Java8升級到Java11時
      下一篇 ? 2022-09-16
      • 如何在Ubuntu中保留文件系統并備份當前開發板鏡像
        0閱讀 0條評論 個贊
        在Ubuntu保留文件系統或者說備份當前開發板鏡像的需求在不斷增加。比如Ubuntu文件系統需要安裝庫文件的話直接使用apt-get工具就可以下載,但由于需要下載的核心板較多,比較費時間,這時需要將安……
      • 國產核心板全志T507助力消防系統升級
        0閱讀 0條評論 個贊
        9月16日下午,位于湖南長沙市區內的中國電信大樓發生火災,建筑高度218米,現場濃煙滾滾,數十層樓體燃燒劇烈。消防救援人員趕到現場后很快將火勢控制住,目前大樓火勢已被撲滅,所幸未發現人員傷亡。湖南電信……
      • 教大家如何處理Spring Boot易流中的用戶和群體!
        0閱讀 0條評論 個贊
        1.準備工作2.用戶操作2.1添加用戶2.2修改用戶2.3刪除用戶2.4查詢用戶3.組操作3.1添加組3.2修改組3.3刪除組3.4查詢組4.查看表詳情雖然說我們在實際開發中,……
      • 從PG15開始WAL壓縮優化
        0閱讀 0條評論 個贊
        PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
      • 深入了解美團葉子發射器開源方案
        0閱讀 0條評論 個贊
        大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • python的環境,你再也不用愁康達
        1閱讀 0條評論 個贊
        CondaGuideConda簡介conda是一個包,依賴和環境管理工具,適用于多種語言,如:Python,R,Scala,Java,Javascript,C/C++,FORTRAN……
      • Sql Server系列:分區表操作
        0閱讀 0條評論 個贊
        1.分區表簡介分區表在邏輯上是一個表,而物理上是多個表。從用戶角度來看,分區表和普通表是一樣的。使用分區表的主要目的是為改善大型表以及具有多個訪問模式的表的可伸縮性和可管理性。分區表是把數據……
      • Python系列入門(四)別傻了 別糊涂了:鏈表、元組、字典、集合的區別
        0閱讀 0條評論 個贊
        總結分析列表、元組、字典、集合的相同與區別之處,只有徹底分清之后,就會在應用的時候,得心應手。四句話總結列表是一個有序且可更改的集合,允許重復成員。元組是一個有序且不可更改的集合,允許重復成員。集合是……
      • 【云原生】-碼頭工人容器遷移神諭到關系型數據庫
        0閱讀 0條評論 個贊
        文章目錄前言??1.創建專用網絡??2.Oracle12C部署?2.1鏡像下載?2.2容器創建?2.3創建業務用戶?2.4監聽啟動??3.MySQL8部署?3.1容器……
      • 平均負載和CPU利用率有什么區別?
        2閱讀 0條評論 個贊
        大家好,我是樹哥。在性能優化中,我們經常會關注CPU平均負載這個指標。但如果讓你來跟我解釋一下什么是平均負載,你能說得清楚嗎?它跟CPU使用率有什么區別?我想可能很多人都數不清楚,今天我們就來……
      • MySQL查詢性能優化指數下推的七大武器
        0閱讀 0條評論 個贊
        前面已經講了MySQL的其他查詢性能優化方式,沒看過可以去了解一下:MySQL查詢性能優化七種武器之索引潛水MySQL查詢性能優化七種武器之鏈路追蹤今天要講的是MySQL的另一種查詢性能優化方式—索……
      • 1 Docker安裝Nexus3
        0閱讀 0條評論 個贊
        1.1創建目錄在硬盤上創建Nexus3的主目錄:mkdir-p/Users/yygnb/dockerMe/nexus3為該目錄添加權限:chmod777-R/Users/yygnb/d……
      • python入門系列(十)學習Python文件處理
        0閱讀 0條評論 個贊
        文件處理在Python中處理文件的關鍵函數是open()函數。有四種不同的方法(模式)來打開一個文件"r"-讀取-默認值。打開一個文件進行讀取,如果文件不存在則出錯。"a"-Append……
      • 高手面試一個人 問4個問題就夠了
        0閱讀 0條評論 個贊
        作者|Mr.K編輯|Emma來源|技術領導力(ID:jishulingdaoli)金九銀十求職季又要來了。據統計,今年的應屆畢業生已破千萬,加上社會面存量人才,相信今年的人才季的熱度,不會低于今年……
      • 內存泄漏——原因、避免和位置
        0閱讀 0條評論 個贊
        .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
      • MySQL中的存儲過程(詳細文章)
        0閱讀 0條評論 個贊
        文章目錄概述優點缺點MySQL存儲過程的定義存儲過程的基本語句格式存儲過程的使用定義一個存儲過程定義一個有參數的存儲過程定義一個流程控制語句IFELSE定義一個條件控制語句CASE定義一個循環語……
      • 一個沒有寫代碼的案例 讓我們看看Flowable為我們提供了哪些功能
        3閱讀 0條評論 個贊
        其實松哥之前已經寫過文章和大家介紹了flowable-ui的玩法了,這是官方提供的一個工具,這個工具不僅可以用來繪制流程圖,還可以用來部署一個流程應用,通過這個流程應用我們可以體驗一把flowa……
      • SQL Server 2005分區模板和實例
        0閱讀 0條評論 個贊
        一、場景這一段時間使用SQLServer2005對幾個系統進行表分區,這幾個系統都有一些特點,比如數據庫某張表持續增長,給數據庫帶來了很大的壓力?,F在假如提供一臺新的服務器,那么我們應該如何規劃……
      • [設計模式] Java設計模式-橋模式
        0閱讀 0條評論 個贊
        目錄【設計模式】Java設計模式-橋接模式簡介橋接模式實例代碼示例①、品牌接口②、汽車品牌③、抽象汽車類④、汽車類型子類⑤、橋接模式測試1|1簡介橋接(Bridge)是用于把抽象化與實現化解耦,使……
      • 漫談考試成長的探索——考試策略
        0閱讀 0條評論 個贊
        在《漫談軟件系統測試——問題解決》一文中,文章借鑒控制疫情的四大策略,總結了軟件系統質量保障的四大策略。那么在日常工作中,我們應該如何理解測試策略呢?什么是測試策略?測試策略是描述軟件開發周期的測試方……
      • 詳細解釋MySQL隔離級別
        0閱讀 0條評論 個贊
        一個事務具有ACID特性,也就是(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔離性、持久性),本文主要講解一下其中的Isolation,也……
      • 設計模式介紹——單一模式
        0閱讀 0條評論 個贊
        簡介一個類只允許創建一個對象(或實例),那么這個類就是一個單例類,這種設計模式稱作單例設計模式(SingletonDesignPattern),簡稱單例模式。單例模式保證系統內存中只存在一個對象,……
      • 多線程技術的歷史發展和簡單使用
        0閱讀 0條評論 個贊
        進程與線程進程是應用的執行實例,可狹義理解為一個應用程序就是一個進程。啟用一個應用程序時就是啟動了一個進程。該應用運行所需的所有地址空間,代碼,數據及系統資源都屬于此進程。進程所使用的所有資源會在進程……
      • MySQL性能調優和優化技術
        0閱讀 0條評論 個贊
        介紹MySQL是一種流行的開源數據庫應用程序,它以一種有意義且易于訪問的方式存儲和構造數據。對于大型應用程序,龐大的數據量可能會導致性能問題。本指南提供了一些關于如何提高MySQL數據庫性能的調……
      • 卡夫卡數據丟失問題優化總結及重復消費原因分析(一)
        0閱讀 0條評論 個贊
        .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>