本文首發於個人公衆號 Linux雲計算網絡(id: cloud_dev),專一於乾貨分享,號內有 10T 書籍和視頻資源,後臺回覆「1024」便可領取,歡迎你們關注,二維碼文末能夠掃。html
這是 Linux 性能分析系列的第三篇,前兩篇分別講了 CPU 和 內存,本篇來看 IO。編程
IO 和 存儲密切相關,存儲能夠歸納爲磁盤,內存,緩存,三者讀寫的性能差距很是大,磁盤讀寫是毫秒級的(通常 0.1-10ms),內存讀寫是微妙級的(通常 0.1-10us),cache 是納秒級的(通常 1-10ns)。但這也是犧牲其餘特性爲代價的,速度快的,價格越貴,容量也越小。緩存
IO 性能這塊,咱們更多關注的是讀寫磁盤的性能。首先,先了解下磁盤的基本信息。服務器
查看磁盤信息,包括磁盤容量,扇區大小,IO 大小等信息,經常使用 fdisk -l
查看:網絡
能夠看到 /dev/ 下有一個 40G 的硬盤,一共 8K 多萬個扇區,每一個扇區 512字節,IO 大小也是 512 字節。工具
查看磁盤使用狀況,一般看磁盤使用率:性能
主要分析磁盤的讀寫效率(IOPS:每秒讀寫的次數;吞吐量:每秒讀寫的數據量),IO 繁忙程度,及 IO 訪問對 CPU 的消耗等性能指標。雲計算
第一個較爲經常使用的仍是這個萬能的 vmstat:
對於 IO,咱們常關注三個部分:
通常這幾個值偏大,都意味着系統 IO 的消耗較大,對於讀請求較大的服務器,b、bo、wa 的值偏大,而寫請求較大的服務器,b、bi、wa 的值偏大。
vmstat 雖然萬能,可是它分析的東西有限,iostat 是專業分析 IO 性能的工具,能夠方便查看 CPU、網卡、tty 設備、磁盤、CD-ROM 等等設備的信息,很是強大,總結下來,共有如下幾種用法:
這裏顯示的是多個 CPU 的平均值,每一個字段的含義我就很少解釋了,我通常會重點關注 %iowait 和 %idle,分別表示 CPU 等待 IO 完成時間的百分比和 CPU 空閒時間百分比。
若是 %iowait 較高,則代表磁盤存在 IO 瓶頸,若是 %idle 較高,則 CPU 比較空閒,若是兩個值都比較高,則有可能 CPU 在等待分配內存,瓶頸在內存,此時應該加大內存,若是 %idle 較低,則此時瓶頸在 CPU,應該增長 CPU 資源。
其中,幾個參數分別解釋以下:
其中,幾個參數解釋以下;
以上這些參數太多了,咱們並不須要每一個都關注,能夠重點關注兩個:
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。
有了以上兩個命令,基本上能對磁盤 IO 的信息有個全方位的瞭解了。但若是要肯定具體哪一個進程的 IO 開銷較大,這就得藉助另外的工具了。
這個命令相似 top,能夠顯示每一個進程的 IO 狀況,有了這個命令,就能夠定位具體哪一個進程的 IO 開銷比較大了。
OK,最後仍是總結下,fdisk -l
和 df
查看磁盤基本信息,iostat -d
查看磁盤 IOPS 和吞吐量,iostat -x
結合 vmstat 查看磁盤的繁忙程度和處理效率。
參考:
http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/iostat.html
http://rdc.hundsun.com/portal/article/731.html
個人公衆號 「Linux雲計算網絡」(id: cloud_dev) ,號內有 10T 書籍和視頻資源,後臺回覆 「1024」 便可領取,分享的內容包括但不限於 Linux、網絡、雲計算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術等內容,歡迎你們關注。