I/O告警分析思路

coding


记录一次IO告警分析过程

接到告警,服务器IO飙升,连接服务器,登录服务器查看分析


top命令查看


首先就是通过top命令查看,因为top命令最直接,且信息量够大,覆盖面够全,可以看到CPU的wa有点高


CPU的wa是是wait,是CPU等待时间,通常是由于磁盘IO问题引起,当然也有可能是其他原因引起的


top命令的其他参数就不多介绍了,网上很多,接着看IO

vmstat


vmstat是一个很强大的工具,它除了能给出系统在性能方面的CPU和内存的统计信息之外,也能提供系统整体上的I/O性能情况

如上图,vmstat采集系统性能信息,取3个样本,每秒采集一次


可以看到采集的数据中,系统写磁盘5032个磁盘块,vmstat内磁盘块大小为1024字节,所以这里系统写磁盘速率约为每秒4MB,vmstat中也有CPU的wa统计,可以看到23%的时间用来等待I/O


vmstat还提供自系统启动以来I/O子系统的性能信息

如上图,包括了磁盘数量,分区数量、读/写请求总数,读/写所花费的时间,以及当前正在处理的I/O总数(inprogress IO),等待I/O完成所花费的毫秒数(milli spent IO),这个是整个系统的IO统计信息


说一下合并读和合并写,linux在读写磁盘时,为了提高性能,内核合并对磁盘相邻区域的请求,这样减少了对磁盘IO的操作,从而一定程度上提高linux性能


从上面的信息,我们已经可以定位是写磁盘造成的IO等待,接着我们需要定位是哪块磁盘造成的

通过-d参数可以看到更细化的每块磁盘的IO信息,如上图,可以看到vda的读写请求,特别是写提交比较频繁,接着就可以查看磁盘下单个分区的统计信息

vmstat虽然提供了详细的信息,但是要能很直观的从统计信息中分辨出问题并不是十分友好

iostat


和vmstat相似的,但是专门用来显示磁盘I/O统计信息的工具,就是iostat,iostat和vmstat的块大小不一样,iostat一般为512字节,

iostat的统计结果默认显示的是传输速率

如图,第一条信息是自系统启动以来的统计信息,第二条开始,为每隔1秒的统计数据(由于截图的时候,故障已处理,所以这里其实看起来并没有什么读写),统计数据分别为:

  • tps    每秒传输次数,该项为每秒对设备/分区读写请求的次数

  • Blk_read/s    每秒读取磁盘块的速率

  • Blk_wrtn/s    每秒写入磁盘块的速率

  • Blk_read    在时间间隔内读取块的总数量

  • Blk_wrtn    在时间间隔内写入块的总数量

这部分是指iostat输出的基本信息,如果想看到更详细的信息,需要用-x参数

从iostat中能更直观的看到那个磁盘在进行大量的读写操作,如果用-x参数,能看到更多的统计信息

sar


除了上面的工具,sar也是linux下性能分析常用的工具,sar也比较通用,除了CPU、内存之外,也能查看关于I/O的信息


sar能看到的I/O相关的信息也就是读写速率,而且显示的是设备的主设备号和次设备号,而不是它们的名称

iotop


而其实最简单的方式是使用iotop,它是一个用来监视磁盘I/O使用状况的top类工具,可以直观的检测到哪一个程序使用的磁盘IO信息

上面的工具,我们需要自己去分析,去查找,iotop很直观的,按照I/O统计展示进程,在运维定位IO故障中效率更高,不过,默认系统不自带,需要yum安装


此次I/O升高是由于jbd2引起的,jbd2是一个文件系统的日志功能,为了保证文件系统的完整性,而引入了这么一个日志功能,会将所有的操作写盘记录日志,这也是为什么刚开始分析看到的磁盘写操作频繁。


网上不少文章有关于jbd2引起I/O高的分析,认为比较好的是这篇https://cloud.tencent.com/developer/article/1465600,有兴趣的可以看下,里面有多种解决方案


本文主要想介绍服务器遇到I/O高的情况的一些分析方法和工具,总结分析思路:

  • 查看系统总体I/O性能

  • 查找I/O高的驱动器或磁盘

  • 查找引起I/O高的进程

  • 查看进程对应的I/O操作或系统调用

  • 进行相应的处理或优化




扫描二维码

关注我们吧



本文分享自微信公众号 - 运维研习社()。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

以上是 I/O告警分析思路 的全部内容, 来源链接: utcz.com/z/509453.html

回到顶部