Linux性能优化-如何迅速分析出系统I/O瓶颈

目录

文件系统I/O性能指标

磁盘I/O性能指标

性能工具

性能指标和工具的联系

如何迅速分析I/O的性能指标


 

首先来看I/O的性能指标有哪些
参考下面这个I/O栈图


文件系统I/O性能指标

  1. 存储空间的使用情况,包括容量,使用率以及剩余空间,也成为磁盘空间的使用量,因为文件系统的数据最终是存储在磁盘上注意,这些知识文件系统向外展示的空间使用,而非在磁盘空间的真实用量,因为文件系统的元数据也会占磁盘空间如果配置了RAID,从文件系统看到的使用量跟实际的磁盘占用空间,也会因RAID级别的不同而不一样,如配置了RAID10后,从文件系统最多只能看到所有磁盘容量的一般
  2. 索引节点使用情况,包括容量,使用量,剩余量如果文件系统中存储过多的小文件,就可能碰到索引节点容量已满的问题
  3. 缓存使用情况,包括页面缓存,目录项缓存,索引节点缓存,各个具体文件系统(ex4,XFS等)的缓存
  4. 文件I/O性能指标,包括IOPS(包括r/s,w/s),响应时间(延迟)以及吞吐量(B/s)等

在考察这类指标时,通常还要考虑实际文件的读写情况,如结合文件大小,文件数量,I/O类型,综合分析文件I/O的性能
虽然这些指标非常重要,但Linux文件系统并没有提供,直接查看这些指标的方法,只能通过系统调用,动态跟踪,基准测试等方法,间接的进行观察,评估
不过Linux为磁盘提供了更详细的数据,所以相关的指标我们也能看到

 

磁盘I/O性能指标

这里有四个核心的磁盘I/O指标

  • 使用率,是指磁盘忙处理I/O请求的百分比,过高的使用率(如超过60%)通常意味着磁盘I/O存在性能瓶颈
  • IOPS(Input/Output Per Second),是指每秒的I/O请求数
  • 吞吐量,是指每秒的I/O请求大小
  • 响应时间,是指从发出I/O请求到收到响应的间隔时间

考察这些指标时,要注意综合I/O具体场景来分析,比如读写场景(顺序读还是随机读),读写比例,读写大小,存储类型(有无RAID 以及RAID的级别,本地存储还是网络存储)等
有一个大忌,就是把不同场景的I/O性能指标,直接进行分析对比,这是很常见的一个误区要避免
除了上述指标,还有缓冲区(Buffer)也是要重点掌握的指标,它经常出现在内存和磁盘问题的分析中

文件系统和磁盘I/O的这些指标都很有用,总结了一张图,可以当做I/O性能分析的指标筛选清单

 


性能工具

对于前面的案例分析回顾

  1. 文件系统原理中的df工具,可以查看文件系统空间容量,也可以查看索引节点容量,文件系统缓存可以通过/proc/meminfo,/proc/slabinfo和slabtop查看,观察页缓存,目录项缓存,索引节点缓存,文件系统缓存
  2. 磁盘I/O原理,通过iostat和pidstat观察磁盘和进程的I/O情况,他们是最常用的I/O性能分析工具,通过iostat可以得到磁盘的I/O使用率,吞吐量,响应时间,IOPS等性能指标,通过pidstat可以观察到进程的I/O吞吐量和块设备的I/O延迟
  3. 狂打日志案例中,先用top查看CPU使用情况,发现iowait高,再用iostat发现磁盘I/O使用率是瓶颈,并用pidstat找出了相关的I/O进程,通过strace和lsof找到问题进程正在读写的文件
  4. 磁盘I/O延迟的单词热度案列中,也用top,iostat,发现磁盘有I/O瓶颈,并用pidstat找到大量I/O的进程,用strace -ff跟踪找到子进程在不断调用write,再用bcc工具filetop和opensnoop从内核跟踪系统调用找出问题
  5. MySql和Redis案例中,也是用top,iostat,pidstat,确定并找出I/O性能问题瓶颈来源,他们是mysqld和redis-server,并用strace和lsof找出他们正在读写的文件,MySql案例中根据读写的文件和引擎原理找出对应的表并优化索引,Redis案例中找到redis-server读写的文件,和正在进行网络通信的TCP Socket,结合Redis原理找到持久化配置有问题,从TCP Socket通讯数据中,发现客户端的不合理行为

 

性能指标和工具的联系

从I/O指标出发,容量把性能工具同系统工作原理关联起来,对性能问题有宏观的认识和把握
从性能工具出发,迅速找出我们想观察的性能指标,特别是在工具有限的情况要,要充分利用好手头的每一个工具,少量工具也要尽力挖掘出大量信息


从文件系统和磁盘I/O的性能指标出发,也就是,想查看某个性能指标时,哪些工具可以做到

从工具出发,也就是安装了某个工具后,要知道这个工具能提供哪些指标
在实际环境中,特别是生产环境中非常重要,很多情况下,我们并没有权限安装新的工具包,只能最大化利用好系统已有的工具,这就需要对他们有足够的了解

 

如何迅速分析I/O的性能指标

比起CPU和内存,虽然文件系统和磁盘I/O性能指标仍然很多,但核心的性能工具就那么几个
找关联,多种性能指标之间都有一定的关联性,不要完全孤立的看待他们,想弄清楚性能指标的关联性,就要通晓每种性能指标的工作原理
通过前面几个案例,从I/O延迟,到MySql,Redis案例,虽然问题千差万别,但从I/O角度来分析,最开始分析思路基本上类似

  1. 先从top,iostat发现磁盘I/O性能瓶颈
  2. 借助pidstat定位导致瓶颈的进程
  3. 随后分析进程的I/O行为,strace和losf并借助bcc
  4. 最后结合应用程序的原理,分析这些I/O的来源

为了缩小排查范围,可以先运行那几个支持指标比较多的工具,如iostat,vmstat,pidstat等
再根据观察到的现象,结合系统和应用程序的原理,寻找下一步分析方面

    


图中列出了最常用的几个文件系统和磁盘I/O性能分析工具,以及相应的分析流程,箭头则表示分析方向,这其中iostat,vmstat,pidstat是最核心的几个性能工具,他们提供了最中意的I/O性能指标
比如分析MySql和Redis中,通过iostat确认磁盘出现I/O性能瓶颈,然后用pidstat找出I/O最大的进程,再借助strace找出该进程正在读写的文件,最后结合应用程序的原理,找出大量I/O的原因

当用iostat发现磁盘有I/O性能瓶颈时,再用pidstat和vmstat检查,可能会发现I/O来自内核线程,如Swap使用大量升高,这种情况下,就得进行内存分析了,先找出占用大量内存的进程,再设法减少内存的使用

 

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值