日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

浅谈 Linux 高负载的系统化分析

發布時間:2024/8/23 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈 Linux 高负载的系统化分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介:?淺談 Linux 高負載的系統化分析,阿里云系統組工程師楊勇通過對線上各種問題的系統化分析。

講解 Linux Load 高如何排查的話題屬于老生常談了,但多數文章只是聚焦了幾個點,缺少整體排查思路的介紹。所謂 “授人以魚不如授人以漁”。本文試圖建立一個方法和套路,來幫助讀者對 Load 高問題排查有一個更全面的認識。

從消除誤解開始

沒有基線的 Load,是不靠譜的 Load

從接觸 Unix/Linux 系統管理的第一天起,很多人就開始接觸 System Load Average 這個監控指標了,然而,并非所有人都知道這個指標的真正含義。一般說來,經常能聽到以下誤解:

  • Load 高是 CPU 負載高……
    傳統 Unix 于 Linux 設計不同。Unix 系統,Load 高就是可運行進程多引發的,但對 Linux 來說不是。對 Linux 來說 Load 高可能有兩種情況:
  • 系統中處于 R 狀態的進程數增加引發的
  • 系統中處于 D 狀態的進程數增加引發的
  • Loadavg 數值大于某個值就一定有問題……
    Loadavg 的數值是相對值,受到 CPU 和 IO 設備多少的影響,甚至會受到某些軟件定義的虛擬資源的影響。Load 高的判斷需要基于某個歷史基線 (Baseline),不能無原則的跨系統去比較 Load。
  • Load 高系統一定很忙…..
    Load 高系統可以很忙,例如 CPU 負載高,CPU 很忙。但 Load 高,系統不都很忙,如 IO 負載高,磁盤可以很忙,但 CPU 可以比較空閑,如 iowait 高。這里要注意,iowait 本質上是一種特殊的 CPU 空閑狀態。另一種 Load 高,可能 CPU 和磁盤外設都很空閑,可能支持鎖競爭引起的,這時候 CPU 時間里,iowait 不高,但 idle 高。

Brendan Gregg 在最近的博客 [Linux Load Averages: Solving the Mystery] (http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html) 中,討論了 Unix 和 Linux Load Average 的差異,并且回朔到 24 年前 Linux 社區的討論,并找到了當時為什么 Linux 要修改 Unix Load Average 的定義。文章認為,正是由于 Linux 引入的 D 狀態線程的計算方式,從而導致 Load 高的原因變得含混起來。因為系統中引發 D 狀態切換的原因實在是太多了,絕非 IO 負載,鎖競爭這么簡單!正是由于這種含混,Load 的數值更加難以跨系統,跨應用類型去比較。所有 Load 高低的依據,全都應該基于歷史的基線。本微信公眾號也曾寫過一篇相關文章,可以參見Linux Load Average那些事兒。

如何排查 Load 高的問題

如前所述,由于在 Linux 操作系統里,Load 是一個定義及其含混的指標,排查 loadavg 高就是一個很復雜的過程。其基本思路就是,根據引起 Load 變化的根源是 R 狀態任務增多,還是 D 狀態任務增多,來進入到不同的流程。

這里給出了 Load 增高的排查的一般套路,僅供參考:

在 Linux 系統里,讀取 /proc/stat 文件,即可獲取系統中 R 狀態的進程數;但 D 狀態的任務數恐怕最直接的方式還是使用 ps 命令比較方便。而 /proc/stat 文件里 procs_blocked 則給出的是處于等待磁盤 IO 的進程數:

通過簡單區分 R 狀態任務增多,還是 D 狀態任務增多,我們就可以進入到不同的排查流程里。下面,我們就這個大圖的排查思路,做一個簡單的梳理。

R 狀態任務增多

即通常所說的 CPU 負載高。此類問題的排查定位主要思路是系統,容器,進程的運行時間分析上,找到在 CPU 上的熱點路徑,或者分析 CPU 的運行時間主要是在哪段代碼上。

CPU user 和 sys 時間的分布通常能幫助人們快速定位與用戶態進程有關,還是與內核有關。另外,CPU 的 run queue 長度和調度等待時間,非主動的上下文切換 (nonvoluntary context switch) 次數都能幫助大致理解問題的場景。

因此,如果要將問題的場景關聯到相關的代碼,通常需要使用 perf,systemtap, ftrace 這種動態的跟蹤工具。

關聯到代碼路徑后,接下來的代碼時間分析過程中,代碼中的一些無效的運行時間也是分析中首要關注的,例如用戶態和內核態中的自旋鎖 (Spin Lock)。

當然,如果 CPU 上運行的都是有非常意義,非常有效率的代碼,那唯一要考慮的就是,是不是負載真得太大了。

D 狀態任務增多

根據 Linux 內核的設計, D 狀態任務本質上是 TASK_UNINTERRUPTIBLE 引發的主動睡眠,因此其可能性非常多。但是由于 Linux 內核 CPU 空閑時間上對 IO 棧引發的睡眠做了特殊的定義,即 iowait,因此iowait 成為 D 狀態分類里定位是否 Load 高是由 IO 引發的一個重要參考。

當然,如前所述, /proc/stat 中的 procs_blocked 的變化趨勢也可以是一個非常好的判定因 iowait引發的 Load 高的一個參考。

CPU iowait 高

很多人通常都對 CPU iowait 有一個誤解,以為 iowait 高是因為這時的 CPU 正在忙于做 IO 操作。其實恰恰相反, iowait 高的時候,CPU 正處于空閑狀態,沒有任何任務可以運行。只是因為此時存在已經發出的磁盤 IO,因此這時的空閑狀態被標識成了 iowait ,而不是 idle。

但此時,如果用 perf probe 命令,我們可以清楚得看到,在 iowait 狀態的 CPU,實際上是運行在 pid 為 0 的 idle 線程上:

相關的 idle 線程的循環如何分別對 CPU iowait 和 idle 計數的代碼,如下所示:

而 Linux IO 棧和文件系統的代碼則會調用 io_schedule,等待磁盤 IO 的完成。這時候,對 CPU 時間被記為 iowait 起關鍵計數的原子變量 rq->nr_iowait 則會在睡眠前被增加。注意,io_schedule 在被調用前,通常 caller 會先將任務顯式地設置成 TASK_UNINTERRUPTIBLE 狀態:

CPU idle 高

如前所述,有相當多的內核的阻塞,即 TASK_UNINTERRUPTIBLE 的睡眠,實際上與等待磁盤 IO 無關,如內核中的鎖競爭,再如內存直接頁回收的睡眠,又如內核中一些代碼路徑上的主動阻塞,等待資源。

Brendan Gregg 在最近的博客 [Linux Load Averages: Solving the Mystery] (http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html)中,使用 perf 命令產生的 TASK_UNINTERRUPTIBLE 的睡眠的火焰圖,很好的展示了引起 CPU idle 高的多樣性。本文不在贅述。

因此,CPU idle 高的分析,實質上就是分析內核的代碼路徑引起阻塞的主因是什么。通常,我們可以使用 perf inject 對 perf record 記錄的上下文切換的事件進行處理,關聯出進程從 CPU 切出 (swtich out) 和再次切入 (switch in) 的內核代碼路徑,生成一個所謂的 Off CPU 火焰圖.

當然,類似于鎖競爭這樣的比較簡單的問題,Off CPU 火焰圖足以一步定位出問題。但是對于更加復雜的因 D 狀態而阻塞的延遲問題,可能 Off CPU 火焰圖只能給我們一個調查的起點。

例如,當我們看到,Off CPU 火焰圖的主要睡眠時間是因為 epoll_wait 等待引發的。那么,我們繼續要排查的應該是網絡棧的延遲,即本文大圖中的 Net Delay 這部分。

至此,你也許會發現,CPU iowait 和 idle 高的性能分析的實質就是 延遲分析。這就是大圖按照內核中資源管理的大方向,將延遲分析細化成了六大延遲分析

  • CPU 延遲
  • 內存延遲
  • 文件系統延遲
  • IO 棧延遲
  • 網絡棧延遲
  • 鎖及同步原語競爭

任何上述代碼路徑引發的 TASK_UNINTERRUPTIBLE 的睡眠,都是我們要分析的對象!

以問題結束

限于篇幅,本文很難將其所涉及的細節一一展開,因為讀到這里,你也許會發現,原來 Load 高的分析,實際上就是對系統的全面負載分析。怪不得叫 System Load 呢。這也是 Load 分析為什么很難在一篇文章里去全面覆蓋。

本文也開啟了淺談 Linux 性能分析系列的第一章。后續我們會推出系列文章,就前文所述的六大延遲分析,一一展開介紹,敬請期待……

關于作者

楊勇 (Oliver Yang),Linux 內核工程師,來自阿里云系統組。曾就職于 EMC,Sun 中國工程研究院,在存儲系統和 Solaris 內核開發領域工作。

原文鏈接

本文為阿里云原創內容,未經允許不得轉載。

總結

以上是生活随笔為你收集整理的浅谈 Linux 高负载的系统化分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 无码人妻丰满熟妇区五十路 | 欧美一区二区三区大屁股撅起来 | 亚洲AV综合色区国产精品天天 | 丰满雪白极品少妇流白浆 | 377p粉嫩大胆色噜噜噜 | 免费的毛片视频 | 超碰人人插 | 三上悠亚ed2k | 国产精品第72页 | 欧美色图影院 | 五月婷在线 | 欧美日韩高清在线播放 | 天天想你在线观看完整版电影高清 | 亚洲天堂第一 | 无码av天堂一区二区三区 | 波多野结衣丝袜 | 亚洲午夜精品 | 一边摸一边抽搐一进一出视频 | 成人免费无码av | 少妇精品在线 | 国产一级做a爰片久久毛片男男 | 国产精品50页 | 日本视频在线看 | 中文字幕精品一区 | 久久久久久穴 | 在线免费黄色 | 欧美黑人性受xxxx精品 | 国产在线观看免费网站 | 欧美bdsm调教视频 | 看日本黄色录像 | 亚洲超碰在线 | 精久久久久久 | 爱爱视频在线看 | 制服丝袜第二页 | 性久久久久久久久 | 中文字幕永久在线播放 | 日韩一区二区三免费高清在线观看 | 中国久久| 欧美成人乱码一二三四区免费 | 欧美抠逼视频 | 牛牛影视一区二区 | 老司机深夜福利在线观看 | 蜜臀尤物一区二区三区直播 | 激情综合文学 | 手机看片福利一区 | 天天插天天狠天天透 | 亚洲成人黄色影院 | www超碰在线| 亚洲成人二区 | 原创少妇半推半就88av | 日韩欧美麻豆 | 亚洲中文字幕无码av永久 | 最新国产露脸在线观看 | 中文字幕校园春色 | 欧美精品免费在线观看 | 激情视频激情小说 | 亚洲成人系列 | 在线天堂v | av大西瓜| 中文字幕亚洲乱码熟女一区二区 | 黄色大片在线免费观看 | 国产在线视频导航 | 欧美1314| 中文字幕高清一区 | 国产精品福利导航 | 色视频综合 | 国产白袜脚足j棉袜在线观看 | 久久久久亚洲日日精品 | 女同动漫免费观看高清完整版在线观看 | 黄色一区二区三区四区 | 欧美成人不卡 | 免费成人看片 | 久久精品—区二区三区舞蹈 | 又大又粗弄得我出好多水 | 亚洲精品在线观看免费 | 特级西西444www高清大视频 | 国产亚洲综合在线 | www.av72| 欧美 中文字幕 | 日韩国产一级 | 91在线精品一区二区三区 | 黄色xxx| 97精品国产 | 亚洲欧美视频 | 美女靠逼视频网站 | www.亚洲在线 | 艳妇乳肉豪妇荡乳 | 亚洲AV成人无码网站天堂久久 | 国产午夜精品一区二区三区视频 | 免费簧片在线观看 | 我要看免费毛片 | 国产一区二区视频在线播放 | 91视频在线| 一区二区三区免费观看 | 久久精品国产99国产 | 99国产精品自拍 | 日本亚洲最大的色成网站www | 白丝校花扒腿让我c | 日本黄区免费视频观看 |