30 | 套路篇:如何迅速分析出系统I/O的瓶颈在哪里?
性能指标
文件系统 I/O 性能指标
- 首先,最容易想到的是存储空间的使用情况,包括容量、使用量以及剩余空间等。我们通常也称这些为磁盘空间的使用量,因为文件系统的数据最终还是存储在磁盘上。
- 其次,你应该想到的是前面多次提到过的缓存使用情况,包括页缓存、目录项缓存、索引节点缓存以及各个具体文件系统(如 ext4、XFS 等)的缓存。这些缓存会使用速度更快的内存,用来临时存储文件数据或者文件系统的元数据,从而可以减少访问慢速磁盘的次数。
- 除了以上这两点,文件 I/O 也是很重要的性能指标,包括 IOPS(包括 r/s 和 w/s)、响应时间(延迟)以及吞吐量(B/s)等。在考察这类指标时,通常还要考虑实际文件的读写情况。比如,结合文件大小、文件数量、I/O 类型等,综合分析文件 I/O 的性能。
磁盘 I/O 性能指标
- 使用率,是指磁盘忙处理 I/O 请求的百分比。过高的使用率(比如超过 60%)通常意味着磁盘 I/O 存在性能瓶颈。
- IOPS(Input/Output Per Second),是指每秒的 I/O 请求数。
- 吞吐量,是指每秒的 I/O 请求大小。
- 响应时间,是指从发出 I/O 请求到收到响应的间隔时间。
性能工具
- 第一,在文件系统的原理中,我介绍了查看文件系统容量的工具 df。它既可以查看文件系统数据的空间容量,也可以查看索引节点的容量。至于文件系统缓存,我们通过 /proc/meminfo、/proc/slabinfo 以及 slabtop 等各种来源,观察页缓存、目录项缓存、索引节点缓存以及具体文件系统的缓存情况。
- 第二,在磁盘 I/O 的原理中,我们分别用 iostat 和 pidstat 观察了磁盘和进程的 I/O 情况。它们都是最常用的 I/O 性能分析工具。通过 iostat ,我们可以得到磁盘的 I/O 使用率、吞吐量、响应时间以及 IOPS 等性能指标;而通过 pidstat ,则可以观察到进程的 I/O 吞吐量以及块设备 I/O 的延迟等。
- 第三,在狂打日志的案例中,我们先用 top 查看系统的 CPU 使用情况,发现 iowait 比较高;然后,又用 iostat 发现了磁盘的 I/O 使用率瓶颈,并用 pidstat 找出了大量 I/O 的进程;最后,通过 strace 和 lsof,我们找出了问题进程正在读写的文件,并最终锁定性能问题的来源——原来是进程在狂打日志。
- 第四,在磁盘 I/O 延迟的单词热度案例中,我们同样先用 top、iostat ,发现磁盘有 I/O 瓶颈,并用 pidstat 找出了大量 I/O 的进程。可接下来,想要照搬上次操作的我们失败了。在随后的 strace 命令中,我们居然没看到 write 系统调用。于是,我们换了一个思路,用新工具 filetop 和 opensnoop ,从内核中跟踪系统调用,最终找出瓶颈的来源。
- 最后,在 MySQL 和 Redis 的案例中,同样的思路,我们先用 top、iostat 以及 pidstat ,确定并找出 I/O 性能问题的瓶颈来源,它们正是 mysqld 和 redis-server。随后,我们又用 strace+lsof 找出了它们正在读写的文件。
- 关于 MySQL 案例,根据 mysqld 正在读写的文件路径,再结合 MySQL 数据库引擎的原理,我们不仅找出了数据库和数据表的名称,还进一步发现了慢查询的问题,最终通过优化索引解决了性能瓶颈。
- 至于 Redis 案例,根据 redis-server 读写的文件,以及正在进行网络通信的 TCP Socket,再结合 Redis 的工作原理,我们发现 Redis 持久化选项配置有问题;从 TCP Socket 通信的数据中,我们还发现了客户端的不合理行为。于是,我们修改 Redis 配置选项,并优化了客户端使用 Redis 的方式,从而减少网络通信次数,解决性能问题。
性能指标和工具的联系
- 从 I/O 指标出发,你更容易把性能工具同系统工作原理关联起来,对性能问题有宏观的认识和把握。
- 而从性能工具出发,可以让你更快上手使用工具,迅速找出我们想观察的性能指标。特别是在工具有限的情况下,我们更要充分利用好手头的每一个工具,少量工具也要尽力挖掘出大量信息。
第一个维度,从文件系统和磁盘 I/O 的性能指标出发
第二个维度,从工具出发
如何迅速分析 I/O 的性能瓶颈
- 先用 iostat 发现磁盘 I/O 性能瓶颈;
- 再借助 pidstat ,定位出导致瓶颈的进程;
- 随后分析进程的 I/O 行为;
- 最后,结合应用程序的原理,分析这些 I/O 的来源。
小结
30 | 套路篇:如何迅速分析出系统I/O的瓶颈在哪里?相关推荐
- 11 | 套路篇:如何迅速分析出系统CPU的瓶颈在哪里?
CPU 的性能指标那么多,CPU 性能分析工具也是一抓一大把,如果离开专栏,换成实际的工作场景,我又该观察什么指标.选择哪个性能工具呢? 不要担心,今天我就以多年的性能优化经验,给你总结出一个&quo ...
- 如何迅速分析出系统CPU的瓶颈在哪里?
内容出自极客时间专栏<Linux 性能优化实战> CPU 的性能指标那么多,CPU 性能分析工具一抓一大把,换成实际的工作场景,该观察什么指标.选择哪个性能工具呢? 不要担心,今天我就以多 ...
- Linux性能优化实战: 套路篇-分析性能问题的一般步骤(55)
一.上节回顾 上一节,我们一起学习了,应用程序监控的基本思路,先简单回顾一下.应用程序的监控,可以分为指标监控和日志监控两大块. 指标监控,主要是对一定时间段内的性能指标进行测量,然后再通过时间序列的 ...
- 应用与系统稳定性第一篇---ANR问题分析的一般套路
image.png ANR(App Not Responding)基本上99%的App都有,即使是系统,也有system_anr,我相信虽然ANR问题这样的普遍,还是有很多人对ANR问题即熟悉又陌生的 ...
- sar 找出系统瓶颈的利器 目前Linux上最为全面的系统性能分析工具之一 直接 sar -dur 1 30 即可看内存 CPU和IO占用...
12. sar 找出系统瓶颈的利器 sar是System Activity Reporter(系统活动情况报告)的缩写.sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行 ...
- 分享一篇glibc 2.30内存管理源码分析
分享一篇glibc 2.30内存管理源码分析,出于时间关系文章中可能存在问题(如纰漏.或者解释不顺,后续我会持续更新修正),还请大家海涵,大家互相探讨,也多多希望大家指出文章中问题,我及时斧正.本文只 ...
- 3.为方便旅客,某航空公司拟开发一个机票预订系统。写出问题定义并分析此系统的可行性。
3.为方便旅客,某航空公司拟开发一个机票预订系统.旅行社把预订机票的旅客信息(姓名.性别.工作单位.身份证号码,旅行时间,旅行目的地等)输入进该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机 ...
- Linux性能优化实战: 套路篇-优化性能问题的一般方法(56)
一.上节回顾 上一节,我带你一起梳理了,性能问题分析的一般步骤.先带你简单回顾一下. 我们可以从系统资源瓶颈和应用程序瓶颈,这两个角度来分析性能问题的根源. 从系统资源瓶颈的角度来说,USE 法是最为 ...
- 基于深度学习的脑电图识别 综述篇(三)模型分析
作者|Memory逆光 本文由作者授权分享 导读 脑电图(EEG)是一个复杂的信号,一个医生可能需要几年的训练并利用先进的信号处理和特征提取方法,才能正确解释其含义.而如今机器学习和深度学习的发展,大 ...
最新文章
- 在Ubuntu 12.04 64bit上搭建Crtmpserver视频点播服务
- x-mixed-replace - 转自博客园cnblog - Scowl Knight
- 从零开始搭建Android框架系列
- Java窗口(JFrame)从零开始(8)——文本框+文本域+密码框
- Yii:$app来源
- mysql 组合索引
- 使用 Google gflags 简化命令行参数处理
- MySQL备份与恢复————用LVM快照恢复
- pod配置Liveness和Readiness探针
- ubuntu服务器开放端口_Docker服务开放了这个端口,服务器分分钟变肉机
- Axure RP9 一启动就崩溃弹出错误报告
- Java程序员的工资标准是多少
- 数据平滑处理——log1p()和exmp1()
- ubuntu流量监控_ubuntu linux下测试实时网络网速流量监控的几种小工具命令方法
- 什么蓝牙耳机音质好?盘点四款HIFI音质蓝牙耳机排行榜
- echoServer回显服务器
- java 计算行驶里程,js根据经纬度换算行驶里程
- Kylin3.1.1集成CDH6.2.1
- 【面试高频题】CMS垃圾收集器是如何工作的?
- 【来龙去脉系列】什么是区块链?
热门文章
- wpf 语音通话_WPF+WCF一步一步打造音频聊天室(三):语音聊天
- bagging和时间序列预测_时间序列的LSTM模型预测——基于Keras
- java jedis sadd_Java实现Redis的集合(set)命令操作
- 三菱gx软件初始化失败怎么解决_三菱PLC的常见问题大全!
- 风控建模 python 知乎_风控建模基本要求及面试问题小结
- sudo修改文件夹名字_修改mac os帐户的短名称和个人文件夹
- python数学函数_「分享」关于Python整理的常用数学函数整理
- getheaderfields java_java – HttpsURLConnection getHeaderFields没有返回set-cookie
- 真香!一行Python代码,帮你制作小姐姐的表情包,靠谱吗?
- 运算符重载 返回类型说明符后加_Java学习:运算符的使用与注意事项