一文掌握 Linux 性能分析之 I/O 篇

本文首發於個人公衆號 CloudDeveloper(ID: cloud_dev),專一於乾貨分享,號內有大量書籍和視頻資源,後臺回覆 「1024」便可領取,歡迎你們關注,二維碼文末能夠掃。

一文掌握 Linux 性能分析之 CPU 篇html

一文掌握 Linux 性能分析以內存篇linux

這是 Linux 性能分析系列的第三篇,前兩篇分別講了 CPU 和 內存,本篇來看 IO。ios

IO 和 存儲密切相關,存儲能夠歸納爲磁盤,內存,緩存,三者讀寫的性能差距很是大,磁盤讀寫是毫秒級的(通常 0.1-10ms),內存讀寫是微妙級的(通常 0.1-10us),cache 是納秒級的(通常 1-10ns)。但這也是犧牲其餘特性爲代價的,速度快的,價格越貴,容量也越小。編程

IO 性能這塊,咱們更多關注的是讀寫磁盤的性能。首先,先了解下磁盤的基本信息。緩存

磁盤基本信息

fdisk

查看磁盤信息,包括磁盤容量,扇區大小,IO 大小等信息,經常使用 fdisk -l 查看:服務器

能夠看到 /dev/ 下有一個 40G 的硬盤,一共 8K 多萬個扇區,每一個扇區 512字節,IO 大小也是 512 字節。網絡

df

查看磁盤使用狀況,一般看磁盤使用率:工具

磁盤性能分析

主要分析磁盤的讀寫效率(IOPS:每秒讀寫的次數;吞吐量:每秒讀寫的數據量),IO 繁忙程度,及 IO 訪問對 CPU 的消耗等性能指標。性能

vmstat

第一個較爲經常使用的仍是這個萬能的 vmstat:雲計算

對於 IO,咱們常關注三個部分:

  • b 值:表示由於 IO 阻塞排隊的任務數
  • bi 和 bo 值:表示每秒讀寫磁盤的塊數,bi(block in)是寫磁盤,bo(block out)是讀磁盤。
  • wa 值:表示由於 IO 等待(wait)而消耗的 CPU 比例。

通常這幾個值偏大,都意味着系統 IO 的消耗較大,對於讀請求較大的服務器,b、bo、wa 的值偏大,而寫請求較大的服務器,b、bi、wa 的值偏大。

iostat

vmstat 雖然萬能,可是它分析的東西有限,iostat 是專業分析 IO 性能的工具,能夠方便查看 CPU、網卡、tty 設備、磁盤、CD-ROM 等等設備的信息,很是強大,總結下來,共有如下幾種用法:

1)iostat -c 查看部分 CPU 使用狀況:

這裏顯示的是多個 CPU 的平均值,每一個字段的含義我就很少解釋了,我通常會重點關注 %iowait 和 %idle,分別表示 CPU 等待 IO 完成時間的百分比和 CPU 空閒時間百分比。

若是 %iowait 較高,則代表磁盤存在 IO 瓶頸,若是 %idle 較高,則 CPU 比較空閒,若是兩個值都比較高,則有可能 CPU 在等待分配內存,瓶頸在內存,此時應該加大內存,若是 %idle 較低,則此時瓶頸在 CPU,應該增長 CPU 資源。

2)iostat -d 查看磁盤使用狀況,主要是顯示 IOPS 和吞吐量信息(-k : 以 KB 爲單位顯示,-m:以 M 爲單位顯示):

其中,幾個參數分別解釋以下:

  • tps:設備每秒的傳輸次數(transfers per second),也就是讀寫次數。
  • kB_read/s:每秒讀磁盤的數據量
  • kB_wrtn/s:每秒寫磁盤的數據量
  • kB_read:讀取磁盤的數據總量
  • kB_wrtn:寫入磁盤的數據總量

3)iostat -x 查看磁盤詳細信息:

其中,幾個參數解釋以下;

  • rrqm/s 和 wrqm/s:分別每秒進行合併的讀操做數和寫操做數,這是什麼意思呢,合併就是說把屢次 IO 請求合併成少許的幾回,這樣能夠減少 IO 開銷,buffer 存在的意義就是爲了解決這個問題的。
  • r/s 和 w/s:每秒磁盤讀寫的次數。這兩個值相加就是 tps。
  • rkB/s 和 wkB/s:每秒磁盤讀寫的數據量,這兩個值和上面的 kB_read/s、kB_wrnt/s 是一個意思。
  • avgrq-sz:平均每次讀寫磁盤扇區的大小。
  • avgqu-sze:平均 IO 隊列長度。隊列長度越短越好。
  • await:平均每次磁盤讀寫的等待時間(ms)。
  • svctm:平均每次磁盤讀寫的服務時間(ms)。
  • %util:一秒鐘有百分之多少的時間用於磁盤讀寫操做。

以上這些參數太多了,咱們並不須要每一個都關注,能夠重點關注兩個:

1)%util:衡量 IO 的繁忙程度

這個值越大,說明產生的 IO 請求較多,IO 壓力較大,咱們能夠結合 %idle 參數來看,若是 %idle < 70% 就說明 IO 比較繁忙了。也能夠結合 vmstat 的 b 參數(等待 IO 的進程數)和 wa 參數(IO 等待所佔 CPU 時間百分比)來看,若是 wa > 30% 也說明 IO 較爲繁忙。

2)await:衡量 IO 的響應速度

通俗理解,await 就像咱們去醫院看病排隊等待的時間,這個值和醫生的服務速度(svctm)和你前面排隊的人數(avgqu-size)有關。若是 svctm 和 await 接近,說明磁盤 IO 響應時間較快,排隊較少,若是 await 遠大於 svctm,說明此時隊列太長,響應較慢,這時能夠考慮換性能更好的磁盤或升級 CPU。

4)iostat 1 2 默認顯示 cpu 和 吞吐量信息,1 定時 1s 顯示,2 顯示 2 條信息

進程 IO 性能分析

有了以上兩個命令,基本上能對磁盤 IO 的信息有個全方位的瞭解了。但若是要肯定具體哪一個進程的 IO 開銷較大,這就得藉助另外的工具了。

iotop

這個命令相似 top,能夠顯示每一個進程的 IO 狀況,有了這個命令,就能夠定位具體哪一個進程的 IO 開銷比較大了。

OK,最後仍是總結下,fdisk -ldf 查看磁盤基本信息,iostat -d 查看磁盤 IOPS 和吞吐量,iostat -x 結合 vmstat 查看磁盤的繁忙程度和處理效率。

參考:
http://linuxtools-rst.readthe...
http://rdc.hundsun.com/portal...


個人公衆號 CloudDeveloper(ID: cloud_dev),號內有大量書籍和視頻資源,後臺回覆 「1024」便可領取,分享的內容包括但不限於雲計算虛擬化、容器、OpenStack、K8S、霧計算、網絡、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++編程技術等內容,歡迎你們關注。

相關文章
相關標籤/搜索