壓力測試和系統調優中,很重要的一塊是監控系統在壓力負載的情況下的表現。特別是當需要分析系統的性能瓶頸所在時,選用合適的監控工具,並逐步分析定位到系統性能的瓶頸所在就是十分重要的了。本文主要介紹在Linux下如何用sysdig工具來定位產生磁盤IO瓶頸的具體文件。
Windows自帶的Resource Monitor工具提供了比較全面的監控功能。其中有一項就是按文件來監控系統的磁盤IO活動。如下圖所示:
所以在windows下(win7和win10)下,我們可以借助這個工具定位到產生磁盤IO瓶頸的具體文件。
但是在Linux下,我們經常使用的幾款工具,都沒能提供按文件監控磁盤IO的功能。比如比較常見的top命令、iotop、htop。都沒有提供該功能。其中iotop是專門監控各種IO的工具。但是它也只提供按進程的磁盤IO狀態信息。
當然,還可以采取間接方式。思路是先找到磁盤IO最大的進程,然后從該進程出發找到磁盤IO最大的文件。這個方式一般結合IO和各種Ptrace工具。但是ptrace工具通用性不是太好。在有些系統上並不能得到輸出。
再嘗試了試驗了諸多工具后。最終發現sysdig是最能滿足需求的工具。
一、安裝
Debian系的系統上(如ubuntu和Debian),直接用 sudo apt install sysdig 命令即可安裝成功。
Centos系的系統上(如Federo和Centos),最方便的方式是用現成的腳本來安裝:
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash
二、利用sysdig來監控文件IO
sysdig本身是強大的系統監控工具。本文不專門介紹sysdig的詳細用法,(詳細用法可以參見這篇文章:系統之鍬sysdig:Linux服務器監控和排障利器 ),主要關注如何使用該工具迅速定位磁盤IO大的文件。
性能測試中,在發現某些事務的響應時間在某些情況下顯著變慢時,就需要定位具體瓶頸所在。一般而言,瓶頸出現在以下幾個地方:CPU使用、磁盤IO、網絡IO以及內存使用上。CPU的使用是比較容易監控的,一般用top或者htop命令就能定位到CPU占用高的進程。在實際的應用中,定位到高CPU使用的具體進程和線程,在大多數情況下,就足夠了。但是如果事務變慢的原因是磁盤IO導致的話,我們往往還需要更進一步的去定位產生高磁盤IO的具體文件,這樣能協助相關的開發工程師,更好的來定位代碼和架構的問題。
要定位到產生高磁盤IO的文件。最便捷的莫過於使用sysdig提供的Chisels功能。Chiesls(直譯為鑿子),是一組Lua腳本,提供高度封裝好的監控功能。sysdig -cl 命令能sysdig當前支持的Chiesls列表。使用具體的Chiels也很簡單,sysdig -c 加上具體的Chiesl名字就可以了:
如上圖,我們看到實時的按IO大小排列的文件名。這樣就能很方便的定位到產生大磁盤IO的具體文件。