本文首发于个人公众号 Linux云计算网络(id: cloud_dev),专一于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」便可领取,欢迎你们关注,二维码文末能够扫。html
这是 Linux 性能分析系列的第三篇,前两篇分别讲了 CPU 和 内存,本篇来看 IO。编程
IO 和 存储密切相关,存储能够归纳为磁盘,内存,缓存,三者读写的性能差距很是大,磁盘读写是毫秒级的(通常 0.1-10ms),内存读写是微妙级的(通常 0.1-10us),cache 是纳秒级的(通常 1-10ns)。但这也是牺牲其余特性为代价的,速度快的,价格越贵,容量也越小。缓存
IO 性能这块,咱们更多关注的是读写磁盘的性能。首先,先了解下磁盘的基本信息。服务器
查看磁盘信息,包括磁盘容量,扇区大小,IO 大小等信息,经常使用 fdisk -l
查看:网络
能够看到 /dev/ 下有一个 40G 的硬盘,一共 8K 多万个扇区,每一个扇区 512字节,IO 大小也是 512 字节。工具
查看磁盘使用状况,一般看磁盘使用率:性能
主要分析磁盘的读写效率(IOPS:每秒读写的次数;吞吐量:每秒读写的数据量),IO 繁忙程度,及 IO 访问对 CPU 的消耗等性能指标。云计算
第一个较为经常使用的仍是这个万能的 vmstat:
对于 IO,咱们常关注三个部分:
通常这几个值偏大,都意味着系统 IO 的消耗较大,对于读请求较大的服务器,b、bo、wa 的值偏大,而写请求较大的服务器,b、bi、wa 的值偏大。
vmstat 虽然万能,可是它分析的东西有限,iostat 是专业分析 IO 性能的工具,能够方便查看 CPU、网卡、tty 设备、磁盘、CD-ROM 等等设备的信息,很是强大,总结下来,共有如下几种用法:
这里显示的是多个 CPU 的平均值,每一个字段的含义我就很少解释了,我通常会重点关注 %iowait 和 %idle,分别表示 CPU 等待 IO 完成时间的百分比和 CPU 空闲时间百分比。
若是 %iowait 较高,则代表磁盘存在 IO 瓶颈,若是 %idle 较高,则 CPU 比较空闲,若是两个值都比较高,则有可能 CPU 在等待分配内存,瓶颈在内存,此时应该加大内存,若是 %idle 较低,则此时瓶颈在 CPU,应该增长 CPU 资源。
其中,几个参数分别解释以下:
其中,几个参数解释以下;
以上这些参数太多了,咱们并不须要每一个都关注,能够重点关注两个:
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。
有了以上两个命令,基本上能对磁盘 IO 的信息有个全方位的了解了。但若是要肯定具体哪一个进程的 IO 开销较大,这就得借助另外的工具了。
这个命令相似 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++编程技术等内容,欢迎你们关注。