成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何正確理解CPU使用率和平均負載的關系?看完你就知道了

新聞 系統運維
CPU(Central Processing Unit)是計算機系統的運算和控制核心,是信息處理、程序運行的最終執行單元,相當于系統的“大腦”。

 [[319705]]

CPU(Central Processing Unit)是計算機系統的運算和控制核心,是信息處理、程序運行的最終執行單元,相當于系統的“大腦”。

當 CPU 過于繁忙,就像“人腦”并發處理過多的事情,會降低做事的效率,嚴重時甚至會導致崩潰“宕機”。因此,理解 CPU 的工作原理,合理控制負載,是保障系統穩定持續運行的重要手段。

CPU 的物理核與邏輯核

一臺機器可能包含多塊 CPU 芯片,多個 CPU 之間通過系統總線通信。

超線程(Hyper-Threading)技術可以讓一個物理核在單位時間內同時處理兩個線程,變成兩個邏輯核。但它不會擁有傳統單核 2 倍的處理能力,也不可能提供完整的并行處理能力。

如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了

舉個例子,假設一個 CPU 芯片就是一個班級;它有 2 個物理核,也就是 2 個同學,老師讓他們分別擔任班長和體育委員;過了一段時間,校長要求每個班級還要有學習委員和生活委員,理論上還需要 2 位同學,但是這個班級只有 2 個人,最后老師只能讓班長和體育委員兼任。

這樣一來,對于不了解的人來說,這個班級有班長、體育委員、學習委員和生活委員 4 個職位,應該有 4 個人,每個職位就是一個邏輯核;但是,實際上這個班級只有 2 位同學,也就是只有 2 個物理核,雖然他們可以做 4 份工作,但是不能把他們當做 4 個人。

如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了

如何查詢 CPU 信息?

在 Linux 系統下,可以從 /proc/cpuinfo 文件中讀取 CPU 信息,如下圖所示:

如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了

查看 CPU 個數:

  1. cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l 

查看 CPU 物理核數:

  1. cat /proc/cpuinfo | grep 'cpu cores' | sort | uniq 

查看 CPU 邏輯核數:

  1. cat /proc/cpuinfo | grep 'siblings' | sort | uniq 

什么是 CPU 使用率?

CPU 使用率就是 CPU 非空閑態運行的時間占比,它反映了 CPU 的繁忙程度。比如,單核 CPU 1s 內非空閑態運行時間為 0.8s,那么它的 CPU 使用率就是 80%;雙核 CPU 1s 內非空閑態運行時間分別為 0.4s 和 0.6s,那么,總體 CPU 使用率就是 (0.4s + 0.6s) / (1s * 2) = 50%,其中 2 表示 CPU 核數,多核 CPU 同理。

在 Linux 系統下,使用 top 命令查看 CPU 使用情況,可以得到如下信息:

  1. Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 77.5%id, 2.1%wa, 0.0%hi, 0.0%si, 20.0%st 
  • us(user):表示 CPU 在用戶態運行的時間百分比,通常用戶態 CPU 高表示有應用程序比較繁忙。典型的用戶態程序包括:數據庫、Web 服務器等。
  • sy(sys):表示 CPU 在內核態運行的時間百分比(不包括中斷),通常內核態 CPU 越低越好,否則表示系統存在某些瓶頸。
  • ni(nice):表示用 nice 修正進程優先級的用戶態進程執行的 CPU 時間。nice 是一個進程優先級的修正值,如果進程通過它修改了優先級,則會單獨統計 CPU 開銷。
  • id(idle):表示 CPU 處于空閑態的時間占比,此時,CPU 會執行一個特定的虛擬進程,名為 System Idle Process。
  • wa(iowait):表示 CPU 在等待 I/O 操作完成所花費的時間,通常該指標越低越好,否則表示 I/O 存在瓶頸,可以用 iostat 等命令做進一步分析。
  • hi(hardirq):表示 CPU 處理硬中斷所花費的時間。硬中斷是由外設硬件(如鍵盤控制器、硬件傳感器等)發出的,需要有中斷控制器參與,特點是快速執行。
  • si(softirq):表示 CPU 處理軟中斷所花費的時間。軟中斷是由軟件程序(如網絡收發、定時調度等)發出的中斷信號,特點是延遲執行。
  • st(steal):表示 CPU 被其他虛擬機占用的時間,僅出現在多虛擬機場景。如果該指標過高,可以檢查下宿主機或其他虛擬機是否異常。

由于 CPU 有多種非空閑態,因此,CPU 使用率計算公式可以總結為:CPU 使用率 = (1 - 空閑態運行時間/總運行時間) * 100%。

根據經驗法則, 建議生產系統的 CPU 總使用率不要超過 70%。

什么是平均負載?

平均負載(Load Average)是指單位時間內,系統處于 可運行狀態(Running / Runnable) 和 不可中斷態 的平均進程數,也就是 平均活躍進程數。

可運行態進程包括正在使用 CPU 或者等待 CPU 的進程;不可中斷態進程是指處于內核態關鍵流程中的進程,并且該流程不可被打斷。比如當進程向磁盤寫數據時,如果被打斷,就可能出現磁盤數據與進程數據不一致。不可中斷態,本質上是系統對進程和硬件設備的一種保護機制。

在 Linux 系統下,使用 top 命令查看平均負載,可以得到如下信息:

  1. load average: 1.091.121.52 

這 3 個數字分別表示 1分鐘、5分鐘、15分鐘內系統的平均負載。該值越小,表示系統工作量越少,負荷越低;反之負荷越高。

平均負載為多少更合理?

理想情況下,每個 CPU 應該滿負荷工作,并且沒有等待進程,此時,平均負載 = CPU 邏輯核數。

但是,在實際生產系統中,不建議系統滿負荷運行。通用的經驗法則是:平均負載 = 0.7 * CPU 邏輯核數。

  • 當平均負載持續大于 0.7 * CPU 邏輯核數,就需要開始調查原因,防止系統惡化;
  • 當平均負載持續大于 1.0 * CPU 邏輯核數,必須尋找解決辦法,降低平均負載;
  • 當平均負載持續大于 5.0 * CPU 邏輯核數,表明系統已出現嚴重問題,長時間未響應,或者接近死機。

除了關注平均負載值本身,我們也應關注平均負載的變化趨勢,這包含兩層含義。一是 load1、load5、load15 之間的變化趨勢;二是歷史的變化趨勢。

  • 當 load1、load5、load15 三個值非常接近,表明短期內系統負載比較平穩。

此時,應該將其與昨天或上周同時段的歷史負載進行比對,觀察是否有顯著上升。

  • 當 load1 遠小于 load5 或 load15 時,表明系統最近 1 分鐘的負載在降低,而過去 5 分鐘或 15 分鐘的平均負載卻很高。
  • 當 load1 遠大于 load5 或 load15 時,表明系統負載在急劇升高,如果不是臨時性抖動,而是持續升高,特別是當 load5 都已超過 0.7 * CPU 邏輯核數 時,應調查原因,降低系統負載。

CPU 使用率與平均負載的關系

CPU 使用率是單位時間內 CPU 繁忙程度的統計。而平均負載不僅包括正在使用 CPU 的進程,還包括等待 CPU 或 I/O 的進程。因此,兩者不能等同,有兩種常見的場景如下所述:

  • CPU 密集型應用,大量進程在等待或使用 CPU,此時 CPU 使用率與平均負載呈正相關狀態。
  • I/O 密集型應用,大量進程在等待 I/O,此時平均負載會升高,但 CPU 使用率不一定很高。

為了更深入的理解 CPU 使用率與平均負載的關系,我們舉一個例子:假設現在有一個電話亭,有 4 個人在等待打電話,電話亭同一時刻只能容納 1 個人打電話,只有拿起電話筒才算是真正使用。

那么 CPU 使用率就是拿起電話筒的時間占比,它只取決于在電話亭里的人的行為,與平均負載沒有非常直接的關系。而平均負載是指在電話亭里的人加上排隊的總人數,如下圖所示:

如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了

性能優化實戰

無論是 CPU 使用率,還是平均負載,都只是反映系統健康狀態的度量指標,而不是問題的根因。

因此,它們的價值主要體現在兩個方面:一是綜合反映當前系統的健康程度,結合監控告警產品,實現快速響應;二是初步定位問題方向,縮小排查范圍,降低故障恢復時間。比如當 CPU iowait 高時,應優先排查磁盤 I/O;當 CPU steal 高時,就優先排查宿主機狀態。

CPU 涵蓋的問題場景有很多,限于篇幅限制,下面以最常見的用戶態 CPU 使用率高為例,介紹下 Java 應用的排查思路,其他場景留待后續分享,推薦閱讀 《如何迅速分析出系統CPU的瓶頸在哪里?》。

如何排查用戶態 CPU 使用率高?

用戶態 CPU 使用率反映了應用程序的繁忙程度,通常與我們自己寫的代碼息息相關。因此,當你在做應用發布、配置變更或性能優化時,如果想定位消耗 CPU 最多的 Java 代碼,可以遵循如下思路:

1、通過 top 命令找到 CPU 消耗最多的進程號;

2、通過 top -Hp 進程號 命令找到 CPU 消耗最多的線程號(列名仍然為 PID);

3、通過printf "%xn" 線程號 命令輸出該線程號對應的 16 進制數字;

4、通過 jstack 進程號 | grep 16進制線程號 -A 10 命令找到 CPU 消耗最多的線程方法堆棧。

如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了

上述方法是目前業界最常用的診斷流程,如果是非 Java 應用,可以將 jstack 替換為 perf。

然而,上述方法有兩個顯著缺陷,一是操作流程復雜,而且往往一次 jstack 還不足以定位根因,需要執行多次;二是只能用于診斷在線問題,如果問題已經發生,無法復現的話,往往只能不了了之。

作者信息:

夏明,GitHub ID @StabilityMan,花名涯海,阿里云 ARMS & EagleEye 技術專家,2016 年加入阿里巴巴,一直從事鏈路追蹤和 APM 監控診斷領域的相關工作。 

 

責任編輯:張燕妮 來源: 高效運維
相關推薦

2020-04-02 10:10:59

CPU系統運算

2019-01-28 10:23:58

CPU使用率Linux

2019-06-05 15:20:00

MongoDBNoSQL數據庫

2020-07-20 10:20:30

this前端代碼

2022-07-23 21:31:24

KubernetesLinux開源

2022-09-15 08:01:32

CPU使用率異步

2022-07-01 13:38:48

霧計算邊緣計算

2018-10-31 11:41:49

Python代碼語言

2017-03-23 19:27:55

LinuxCPUCPU利用率

2016-03-09 19:52:02

無線應用Wi-Fi定位

2022-09-02 19:10:46

高并發架構系統

2021-03-14 15:58:26

手機定位系統

2019-05-16 08:51:22

物聯網獲利IOT

2023-07-27 08:40:45

PawSQL數據庫

2010-02-01 10:54:37

C++框架

2020-01-07 15:10:32

Linuxinode命令

2017-12-13 12:30:33

LinuxUnix文件系統

2009-06-18 10:29:24

Hibernate I

2019-09-24 14:52:35

CPU負載Linux

2017-06-01 18:55:44

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 五月天婷婷丁香 | 久久免费精品视频 | 久久国产免费 | 伊人最新网址 | 精品无码久久久久久国产 | 亚洲一区二区三区免费在线观看 | 国产高清免费 | 国产精品久久久久久久白浊 | 成人在线视频看看 | 99只有精品| 在线观看三级av | 在线观看中文字幕 | 日韩免费视频 | 99精品国产一区二区三区 | 国产精品久久久久久高潮 | 亚洲一区二区视频在线播放 | 亚洲精品一区二区 | 国产在线高清 | 91精品国产色综合久久 | 三级在线免费观看 | 午夜久久久久久久久久一区二区 | 欧美一级特黄aaa大片在线观看 | 伊人精品久久久久77777 | 精品国产99 | 99re视频在线 | 久久久久亚洲视频 | 精品久久久久久久久久久院品网 | 一区二区三区久久 | 国产亚洲精品91 | 天天爱爱网| 欧美天堂在线 | 欧美日韩免费一区二区三区 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 久久久久久久国产精品视频 | 一区二区三区av | 久久伦理电影 | 亚洲精品中文在线观看 | 国产精品久久精品 | 欧美国产日韩成人 | 日韩看片 | 欧美精品成人一区二区三区四区 |