主頁 >  其他 > 如何迅速分析出系統I/O的瓶頸在哪里?

如何迅速分析出系統I/O的瓶頸在哪里?

2020-12-07 12:45:30 其他

性能指標

老規矩,我們先來回顧一下,描述 I/O 的性能指標有哪些?你可以先回想一下檔案系統和磁盤 I/O 的原理,結合下面這張 Linux 系統的 I/O 堆疊圖,憑著記憶和理解自己寫一寫,或者,你也可以打開前面的文章,挨個復習總結一下,

如何迅速分析出系統I/O的瓶頸在哪里?

說了這么久的 I/O 性能知識,一說起 I/O 指標,你應該首先會想到分類描述,我們要區分開檔案系統和磁盤,分別用不同指標來描述它們的性能,

檔案系統I/O性能指標

我們先來看檔案系統的情況,

首先,最容易想到的是存盤空間的使用情況,包括容量、使用量以及剩余空間等,我們通常也稱這些為磁盤空間的使用量,因為檔案系統的資料最侄訓是存盤在磁盤上,

不過要注意,這些只是檔案系統向外展示的空間使用,而非在磁盤空間的真實用量,因為檔案系統的元資料也會占用磁盤空間,

而且,如果你配置了 RAID,從檔案系統看到的使用量跟實際磁盤的占用空間,也會因為RAID 級別的不同而不一樣,比方說,配置 RAID10 后,你從檔案系統最多也只能看到所有磁盤容量的一半,

除了資料本身的存盤空間,還有一個容易忽略的是索引節點的使用情況,它也包括容量、使用量以及剩余量等三個指標,如果檔案系統中存盤過多的小檔案,就可能碰到索引節點容量已滿的問題,

其次,你應該想到的是前面多次提到過的快取使用情況,包括頁快取、目錄項快取、索引節點快取以及各個具體檔案系統(如 ext4、XFS 等)的快取,這些快取會使用速度更快的記憶體,用來臨時存盤檔案資料或者檔案系統的元資料,從而可以減少訪問慢速磁盤的次數,

除了以上這兩點,檔案 I/O 也是很重要的性能指標,包括 IOPS(包括 r/s 和 w/s)、回應時間(延遲)以及吞吐量(B/s)等,在考察這類指標時,通常還要考慮實際檔案的讀寫情況,比如,結合檔案大小、檔案數量、I/O 型別等,綜合分析檔案 I/O 的性能,

誠然,這些性能指標非常重要,但不幸的是,Linux 檔案系統并沒提供,直接查看這些指標的方法,我們只能通過系統呼叫、動態跟蹤或者基準測驗等方法,間接進行觀察、評估,不過,實際上,這些指標在我們考察磁盤性能時更容易見到,因為 Linux 為磁盤性能提供了更詳細的資料,

磁盤I/O性能指標

接下來,我們就來具體看看,哪些性能指標可以衡量磁盤 I/O 的性能,

在磁盤 I/O 原理的文章中,我曾提到過四個核心的磁盤 I/O 指標,

  • 使用率,是指磁盤忙處理 I/O 請求的百分比,過高的使用率(比如超過 60%)通常意味著磁盤 I/O 存在性能瓶頸,
  • IOPS(Input/Output Per Second),是指每秒的 I/O 請求數,
  • 吞吐量,是指每秒的 I/O 請求大小,
  • 回應時間,是指從發出 I/O 請求到收到回應的間隔時間,

考察這些指標時,一定要注意綜合 I/O 的具體場景來分析,比如讀寫型別(順序還是隨機)、讀寫比例、讀寫大小、存盤型別(有無 RAID 以及 RAID 級別、本地存盤還是網路存盤)等,

不過,這里有個大忌,就是把不同場景的 I/O 性能指標,直接進行分析對比,這是很常見的一個誤區,你一定要避免,

除了這些指標外,在前面 Cache 和 Buffer 原理的文章中,我曾多次提到,緩沖區(Buffer)也是要重點掌握的指標,它經常出現在記憶體和磁盤問題的分析中,

檔案系統和磁盤 I/O 的這些指標都很有用,需要我們熟練掌握,所以我總結成了一張圖,幫你分類和記憶,你可以保存并列印出來,方便隨時查看復習,也可以把它當成 I/O 性能分析的“指標篩選”清單使用,

如何迅速分析出系統I/O的瓶頸在哪里?

性能工具

掌握檔案系統和磁盤 I/O 的性能指標后,我們還要知道,怎樣去獲取這些指標,也就是搞明白工具的使用問題,

第一,在檔案系統的原理中,我介紹了查看檔案系統容量的工具 df,它既可以查看檔案系統資料的空間容量,也可以查看索引節點的容量,至于檔案系統快取,我們通過/proc/meminfo、/proc/slabinfo 以及 slabtop 等各種來源,觀察頁快取、目錄項快取、索引節點快取以及具體檔案系統的快取情況,

第二,在磁盤 I/O 的原理中,我們分別用 iostat 和 pidstat 觀察了磁盤和行程的 I/O 情況,它們都是最常用的 I/O 性能分析工具,通過 iostat ,我們可以得到磁盤的 I/O 使用率、吞吐量、回應時間以及 IOPS 等性能指標;而通過 pidstat ,則可以觀察到行程的 I/O吞吐量以及塊設備 I/O 的延遲等,

第三,在狂打日志的案例中,我們先用 top 查看系統的 CPU 使用情況,發現 iowait 比較高;然后,又用 iostat 發現了磁盤的 I/O 使用率瓶頸,并用 pidstat 找出了大量 I/O 的行程;最后,通過 strace 和 lsof,我們找出了問題行程正在讀寫的檔案,并最終鎖定性能問題的來源——原來是行程在狂打日志,

第四,在磁盤 I/O 延遲的單詞熱度案例中,我們同樣先用 top、iostat ,發現磁盤有 I/O瓶頸,并用 pidstat 找出了大量 I/O 的行程,可接下來,想要照搬上次操作的我們失敗了,在隨后的 strace 命令中,我們居然沒看到 write 系統呼叫,于是,我們換了一個思路,用新工具 filetop 和 opensnoop ,從內核中跟蹤系統呼叫,最終找出瓶頸的來源,

最后,在 MySQL 和 Redis 的案例中,同樣的思路,我們先用 top、iostat 以及 pidstat ,確定并找出 I/O 性能問題的瓶頸來源,它們正是 mysqld 和 redis-server,隨后,我們又用 strace+lsof 找出了它們正在讀寫的檔案,

關于 MySQL 案例,根據 mysqld 正在讀寫的檔案路徑,再結合 MySQL 資料庫引擎的原理,我們不僅找出了資料庫和資料表的名稱,還進一步發現了慢查詢的問題,最終通過優化索引解決了性能瓶頸,

至于 Redis 案例,根據 redis-server 讀寫的檔案,以及正在進行網路通信的 TCPSocket,再結合 Redis 的作業原理,我們發現 Redis 持久化選項配置有問題;從 TCPSocket 通信的資料中,我們還發現了客戶端的不合理行為,于是,我們修改 Redis 配置選項,并優化了客戶端使用 Redis 的方式,從而減少網路通信次數,解決性能問題,

性能指標和工具的聯系

同前面 CPU 和記憶體板塊的學習一樣,我建議從指標和工具兩個不同維度出發,整理記憶,

從 I/O 指標出發,你更容易把性能工具同系統作業原理關聯起來,對性能問題有宏觀的認識和把握,而從性能工具出發,可以讓你更快上手使用工具,迅速找出我們想觀察的性能指標,特別是在工具有限的情況下,我們更要充分利用好手頭的每一個工具,少量工具也要盡力挖掘出大量資訊,

第一個維度,從檔案系統和磁盤 I/O 的性能指標出發,換句話說,當你想查看某個性能指標時,要清楚知道,哪些工具可以做到

根據不同的性能指標,對提供指標的性能工具進行分類和理解,這樣,在實際排查性能問題時,你就可以清楚知道,什么工具可以提供你想要的指標,而不是毫無根據地挨個嘗試,撞運氣,

雖然你不需要把所有相關的工具背下來,但如果能記清楚每個指標對應的工具特性,實際操作起來,一定能更高效、靈活,

這里,我把提供 I/O 性能指標的工具做成了一個表格,方便你梳理關系和理解記憶,你可以把它保存并列印出來,隨時記憶,當然,你也可以把它當成一個“指標工具”指南來使用,

如何迅速分析出系統I/O的瓶頸在哪里?

下面,我們再來看第二個維度,

第二個維度,從工具出發,也就是當你已經安裝了某個工具后,要知道這個工具能提供哪些指標

這在實際環境中,特別是生產環境中也是非常重要的,因為很多情況下,你并沒有權限安裝新的工具包,只能最大化地利用好系統已有的工具,而這就需要你對它們有足夠的了解,

具體到每個工具的使用方法,一般都支持豐富的配置選項,不過不用擔心,這些配置選項并不用背下來,你只要知道有哪些工具,以及這些工具的基本功能是什么就夠了,真正要用到的時候, 通過 man 命令,查它們的使用手冊就可以了,

同樣的,我也將這些常用工具匯總成了一個表格,方便你區分和理解,自然,你也可以當成一個“工具指標”指南使用,需要時查表即可,

如何迅速分析出系統I/O的瓶頸在哪里?

如何迅速分析I/O的性能瓶頸

到這里,相信你對記憶體的性能指標已經非常熟悉,也清楚每種性能指標分別能用什么工具來獲取,

你應該發現了,比起前兩個板塊,雖然檔案系統和磁盤的 I/O 性能指標仍比較多,但核心的性能工具,其實就是那么幾個,熟練掌握它們,再根據實際系統的現象,并配合系統和應用程式的原理, I/O 性能分析就很清晰了,

不過,不管怎么說,如果每次一碰到 I/O 的性能問題,就把上面提到的所有工具跑一遍,肯定是不現實的,

在實際生產環境中,我們希望的是,盡可能快地定位系統的瓶頸,然后盡可能快地優化性能,也就是要又快又準地解決性能問題,

那有沒有什么方法,可以又快又準地找出系統的 I/O 瓶頸呢?答案是肯定的,

還是那句話,找關聯,多種性能指標間都有一定的關聯性,不要完全孤立的看待他們,想弄清楚性能指標的關聯性,就要通曉每種性能指標的作業原理,這也是為什么我在介紹每個性能指標時,都要穿插講解相關的系統原理,再次希望你能記住這一點,

以我們前面幾期的案例為例,如果你仔細對比前面的幾個案例,從 I/O 延遲的案例到MySQL 和 Redis 的案例,就會發現,雖然這些問題千差萬別,但從 I/O 角度來分析,最開始的分析思路基本上類似,都是:

  1. 先用 iostat 發現磁盤 I/O 性能瓶頸;
  2. 再借助 pidstat ,定位出導致瓶頸的行程;
  3. 隨后分析行程的 I/O 行為;
  4. 最后,結合應用程式的原理,分析這些 I/O 的來源,

所以,為了縮小排查范圍,我通常會先運行那幾個支持指標較多的工具,如 iostat、vmstat、pidstat 等,然后再根據觀察到的現象,結合系統和應用程式的原理,尋找下一步的分析方向,我把這個程序畫成了一張圖,你可以保存下來參考使用,

如何迅速分析出系統I/O的瓶頸在哪里?

圖中列出了最常用的幾個檔案系統和磁盤 I/O 性能分析工具,以及相應的分析流程,箭頭則表示分析方向,這其中,iostat、vmstat、pidstat 是最核心的幾個性能工具,它們也提供了最重要的 I/O 性能指標,舉幾個例子你可能更容易理解,

例如,在前面講過的 MySQL 和 Redis 案例中,我們就是通過 iostat 確認磁盤出現 I/O 性能瓶頸,然后用 pidstat 找出 I/O 最大的行程,接著借助 strace 找出該行程正在讀寫的檔案,最后結合應用程式的原理,找出大量 I/O 的原因,

再如,當你用 iostat 發現磁盤有 I/O 性能瓶頸后,再用 pidstat 和 vmstat 檢查,可能會發現 I/O 來自內核執行緒,如 Swap 使用大量升高,這種情況下,你就得進行記憶體分析了,先找出占用大量記憶體的行程,再設法減少記憶體的使用,

另外注意,我在這個圖中只列出了最核心的幾個性能工具,并沒有列出前面表格中的所有工具,這么做,一方面是不想用大量的工具串列嚇到你,在學習之初就接觸所有核心或小眾的工具,不見得是好事,另一方面,也是希望你能先把重心放在核心工具上,畢竟熟練掌握它們,就可以解決大多數問題,

所以,你可以保存下這張圖,作為檔案系統和磁盤 I/O 性能分析的思路圖譜,從最核心的這幾個工具開始,通過我提供的那些案例,自己在真實環境里實踐,拿下它們,

總結

本文,我們一起復習了常見的檔案系統和磁盤 I/O 性能指標,梳理了常見的 I/O 性能觀測工具,并建立了性能指標和工具的關聯,最后,我們還總結了快速分析 I/O 性能問題的思路,

還是那句話,雖然 I/O 的性能指標很多,相應的性能分析工具也有不少,但熟悉了各指標含義后,你就會自然找到它們的關聯,順著這個思路往下走,掌握常用的分析套路也并不難,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/231123.html

標籤:其他

上一篇:年輕人你不知道吧?《Spring Cloud Alibaba從入門到實戰》pdf免費開放下載了!

下一篇:vs2017+opencv4.1.0配置檔案

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more