压力测试和系统调优中,很重要的一块是监控系统在压力负载的情况下的表现。特别是当需要分析系统的性能瓶颈所在时,选用合适的监控工具,并逐步分析定位到系统性能的瓶颈所在就是十分重要的了。本文主要介绍在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的具体文件。