【原创】一文掌握 Linux 性能分析之 I/O 篇
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。
这是 Linux 性能分析系列的第三篇,前两篇分别讲了 CPU 和 内存,本篇来看 IO。
IO 和 存储密切相关,存储可以概括为磁盘,内存,缓存,三者读写的性能差距非常大,磁盘读写是毫秒级的(一般 0.1-10ms),内存读写是微妙级的(一般 0.1-10us),cache 是纳秒级的(一般 1-10ns)。但这也是牺牲其他特性为代价的,速度快的,价格越贵,容量也越小。
IO 性能这块,我们更多关注的是读写磁盘的性能。首先,先了解下磁盘的基本信息。
磁盘基本信息
fdisk
查看磁盘信息,包括磁盘容量,扇区大小,IO 大小等信息,常用 fdisk -l 查看:

可以看到 /dev/ 下有一个 40G 的硬盘,一共 8K 多万个扇区,每个扇区 512字节,IO 大小也是 512 字节。
df
查看磁盘使用情况,通常看磁盘使用率:

磁盘性能分析
主要分析磁盘的读写效率(IOPS:每秒读写的次数;吞吐量:每秒读写的数据量),IO 繁忙程度,及 IO 访问对 CPU 的消耗等性能指标。
vmstat
第一个较为常用的还是这个万能的 vmstat:

对于 IO,我们常关注三个部分:
- b 值:表示因为 IO 阻塞排队的任务数
- bi 和 bo 值:表示每秒读写磁盘的块数,bi(block in)是写磁盘,bo(block out)是读磁盘。
- wa 值:表示因为 IO 等待(wait)而消耗的 CPU 比例。
一般这几个值偏大,都意味着系统 IO 的消耗较大,对于读请求较大的服务器,b、bo、wa 的值偏大,而写请求较大的服务器,b、bi、wa 的值偏大。
iostat
vmstat 虽然万能,但是它分析的东西有限,iostat 是专业分析 IO 性能的工具,可以方便查看 CPU、网卡、tty 设备、磁盘、CD-ROM 等等设备的信息,非常强大,总结下来,共有以下几种用法:
1)iostat -c 查看部分 CPU 使用情况:

这里显示的是多个 CPU 的平均值,每个字段的含义我就不多解释了,我一般会重点关注 %iowait 和 %idle,分别表示 CPU 等待 IO 完成时间的百分比和 CPU 空闲时间百分比。
如果 %iowait 较高,则表明磁盘存在 IO 瓶颈,如果 %idle 较高,则 CPU 比较空闲,如果两个值都比较高,则有可能 CPU 在等待分配内存,瓶颈在内存,此时应该加大内存,如果 %idle 较低,则此时瓶颈在 CPU,应该增加 CPU 资源。
2)iostat -d 查看磁盘使用情况,主要是显示 IOPS 和吞吐量信息(-k : 以 KB 为单位显示,-m:以 M 为单位显示):

其中,几个参数分别解释如下:
- tps:设备每秒的传输次数(transfers per second),也就是读写次数。
- kB_read/s:每秒读磁盘的数据量
- kB_wrtn/s:每秒写磁盘的数据量
- kB_read:读取磁盘的数据总量
- kB_wrtn:写入磁盘的数据总量
3)iostat -x 查看磁盘详细信息:

其中,几个参数解释如下;
- rrqm/s 和 wrqm/s:分别每秒进行合并的读操作数和写操作数,这是什么意思呢,合并就是说把多次 IO 请求合并成少量的几次,这样可以减小 IO 开销,buffer 存在的意义就是为了解决这个问题的。
- r/s 和 w/s:每秒磁盘读写的次数。这两个值相加就是 tps。
- rkB/s 和 wkB/s:每秒磁盘读写的数据量,这两个值和上面的 kB_read/s、kB_wrnt/s 是一个意思。
- avgrq-sz:平均每次读写磁盘扇区的大小。
- avgqu-sze:平均 IO 队列长度。队列长度越短越好。
- await:平均每次磁盘读写的等待时间(ms)。
- svctm:平均每次磁盘读写的服务时间(ms)。
- %util:一秒钟有百分之多少的时间用于磁盘读写操作。
以上这些参数太多了,我们并不需要每个都关注,可以重点关注两个:
1)%util:衡量 IO 的繁忙程度
这个值越大,说明产生的 IO 请求较多,IO 压力较大,我们可以结合 %idle 参数来看,如果 %idle < 70% 就说明 IO 比较繁忙了。也可以结合 vmstat 的 b 参数(等待 IO 的进程数)和 wa 参数(IO 等待所占 CPU 时间百分比)来看,如果 wa > 30% 也说明 IO 较为繁忙。
2)await:衡量 IO 的响应速度
通俗理解,await 就像我们去医院看病排队等待的时间,这个值和医生的服务速度(svctm)和你前面排队的人数(avgqu-size)有关。如果 svctm 和 await 接近,说明磁盘 IO 响应时间较快,排队较少,如果 await 远大于 svctm,说明此时队列太长,响应较慢,这时可以考虑换性能更好的磁盘或升级 CPU。
4)iostat 1 2 默认显示 cpu 和 吞吐量信息,1 定时 1s 显示,2 显示 2 条信息

进程 IO 性能分析
有了以上两个命令,基本上能对磁盘 IO 的信息有个全方位的了解了。但如果要确定具体哪个进程的 IO 开销较大,这就得借助另外的工具了。
iotop
这个命令类似 top,可以显示每个进程的 IO 情况,有了这个命令,就可以定位具体哪个进程的 IO 开销比较大了。

OK,最后还是总结下,fdisk -l 和 df 查看磁盘基本信息,iostat -d 查看磁盘 IOPS 和吞吐量,iostat -x 结合 vmstat 查看磁盘的繁忙程度和处理效率。
参考:
http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/iostat.html
http://rdc.hundsun.com/portal/article/731.html
我的公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。
【原创】一文掌握 Linux 性能分析之 I/O 篇的更多相关文章
- 【转】一文掌握 Linux 性能分析之 I/O 篇
[转]一文掌握 Linux 性能分析之 I/O 篇 这是 Linux 性能分析系列的第三篇,前两篇分别讲了 CPU 和 内存,本篇来看 IO. IO 和 存储密切相关,存储可以概括为磁盘,内存,缓存, ...
- 一文掌握 Linux 性能分析之网络篇
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 这是 Linu ...
- 【转】一文掌握 Linux 性能分析之网络篇(续)
[转]一文掌握 Linux 性能分析之网络篇(续) 在上篇网络篇中,我们已经介绍了几个 Linux 网络方向的性能分析工具,本文再补充几个.总结下来,余下的工具包括但不限于以下几个: sar:统计信息 ...
- 【转】一文掌握 Linux 性能分析之网络篇
[转]一文掌握 Linux 性能分析之网络篇 比较宽泛地讲,网络方向的性能分析既包括主机测的网络配置查看.监控,又包括网络链路上的包转发时延.吞吐量.带宽等指标分析.包括但不限于以下分析工具: pin ...
- 【转】一文掌握 Linux 性能分析之内存篇
[转]一文掌握 Linux 性能分析之内存篇 前面我们已经学习了 CPU 篇,这篇来看下内存篇. 01 内存信息 同样在分析内存之前,我们得知到怎么查看系统内存信息,有以下几种方法. 1.1 /pro ...
- 【转】一文掌握 Linux 性能分析之 CPU 篇
[转]一文掌握 Linux 性能分析之 CPU 篇 平常工作会涉及到一些 Linux 性能分析的问题,因此决定总结一下常用的一些性能分析手段,仅供参考. 说到性能分析,基本上就是 CPU.内存.磁盘 ...
- 一文掌握 Linux 性能分析之网络篇(续)
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 这是 Linu ...
- 一文掌握 Linux 性能分析之 CPU 篇
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 平常工作会涉及 ...
- 一文掌握 Linux 性能分析之内存篇
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 前面我们已经学 ...
随机推荐
- 将已经存在的异步请求callback转换为同步promise
由于js是单线程执行,为防止阻塞,会有很多异步回调函数callback,嵌套层次多了,可读性就差了很多.随着社区的发展,出现了promise.我们来将一些常见的回调函数做修改,变成promise的链式 ...
- RabbitMQ 实现远程过程调用RPC
RPC调用的顺序1. 在客户端初始化的时候,也就是SimpleRpcClient类初始化的时候,它会随机的创建一个callback队列,用于存放服务的返回值,这个队列是exclusive的.连接断开就 ...
- jquery的选择器——[作为学习备用]
1,转载:https://www.cnblogs.com/onlys/articles/jQuery.html jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法 $(&quo ...
- XYZZY spfa 最长路 判环
题意: 有n个点 m条边 每个边有权值 一开始有一百血 每次经过一条路都会加上其权值 判断是否能够到达n 显然 有正环的时候肯定能够到达 最短路好题!!!!!!! 显用folyed判断是否联通 ...
- numpy库补充 mean函数应用
mean()函数功能:求取均值经常操作的参数为axis,以m * n矩阵举例: axis 不设置值,对 m*n 个数求均值,返回一个实数 axis = 0:压缩行,对各列求均值,返回 1* n 矩阵 ...
- PTA_Have fun with numbers(C++)
#include<iostream> #include<cstring> using namespace std; int main() { ; ]="; ]={}, ...
- Linux中目录以及路径问题
具体参考:https://www.cnblogs.com/OctoptusLian/p/8546580.html 在Linux中,存在着绝对路径和相对路径 绝对路径:路径的写法一定是由根目录 / 写起 ...
- json劫持payload
<html> <head>jsonp hijacking</head> <body> <script> function jj(json){ ...
- asp.net core1.1的PlatformAbstraction源码
PlatformAbstraction类在现在的asp.net core中已经废弃了,但是此类的设计还是不错的,可以借鉴,源码如下: namespace Microsoft.Extensions.Pl ...
- 2019-3-22KeyDown,KeyPress 和 KeyUp 事件
研究了一下KeyDown,KeyPress 和 KeyUp 的学问.让我们带着如下问题来说明: 1.这三个事件的顺序是怎么样的? 2.KeyDown 触发后,KeyUp是不是一定触发? 3.三个事件的 ...
