一、磁盘的性能指标
说到磁盘性能的衡量标准,必须要提到五个常见指标,也就是我们经常用到的,使用率、饱和度、IOPS、吞吐量以及响应时间等。这五个指标,是衡量磁盘性能的基本指标。
使用率,是指磁盘处理 I/O 的时间百分比。过高的使用率(比如超过 80%),通常意味着磁盘 I/O 存在性能瓶颈。
饱和度,是指磁盘处理 I/O 的繁忙程度。过高的饱和度,意味着磁盘存在严重的性能瓶颈。当饱和度为 100% 时,磁盘无法接受新的 I/O 请求。
IOPS(Input/Output Per Second),是指每秒的 I/O 请求数。吞吐量,是指每秒的 I/O 请求大小。
响应时间,是指 I/O 请求从发出到收到响应的间隔时间。
二、磁盘I/O观测
第一个要观测的,是每块磁盘的使用情况。iostat 是最常用的磁盘 I/O 性能观测工具,它提供了每个磁盘的使用率、IOPS、吞吐量等各种常见的性能指标,当然,这些指标实际上来自 /proc/diskstats。iostat 的输出界面如下。
# -d -x表示显示所有磁盘I/O的指标 [root@10-9-170-111 ~]# iostat -d -x 1 Linux 4.19.0-6.el7.ucloud.x86_64 (10-9-170-111) 07/21/2022 _x86_64_ (12 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.07 0.02 0.59 0.37 5.53 19.54 0.00 0.12 0.21 0.11 0.34 0.02 vdb 0.46 0.03 2.33 2416.77 45.43 11880.32 9.86 0.01 0.00 0.16 0.00 0.05 12.97
这些指标中,你要注意:
%util ,就是我们前面提到的磁盘 I/O 使用率;
r/s+ w/s ,就是 IOPS;rkB/s+wkB/s ,就是吞吐量;
r_await+w_await ,就是响应时间。
在观测指标时,也别忘了结合请求的大小( rareq-sz 和 wareq-sz)一起分析。
你可能注意到,从 iostat 并不能直接得到磁盘饱和度。事实上,饱和度通常也没有其他简单的观测方法,不过,你可以把观测到的,平均请求队列长度或者读写请求完成的等待时间,跟基准测试的结果(比如通过 fio)进行对比,综合评估磁盘的饱和情况。
三、进程 I/O 观测
除了每块磁盘的 I/O 情况,每个进程的 I/O 情况也是我们需要关注的重点。上面提到的 iostat 只提供磁盘整体的 I/O 性能数据,缺点在于,并不能知道具体是哪些进程在进行磁盘读写。要观察进程的 I/O 情况,你还可以使用 pidstat 和 iotop 这两个工具。
3.1 pidstat
[root@10-9-170-111 ~]# pidstat -d 1 Linux 4.19.0-6.el7.ucloud.x86_64 (10-9-170-111) 07/21/2022 _x86_64_ (12 CPU) 06:17:21 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 06:17:22 PM 996 3552 475.25 40835.64 0.00 mysqld
从 pidstat 的输出你能看到,它可以实时查看每个进程的 I/O 情况,包括下面这些内容。
用户 ID(UID)和进程 ID(PID) 。
每秒读取的数据大小(kB_rd/s) ,单位是 KB。
每秒发出的写请求数据大小(kB_wr/s) ,单位是 KB。
每秒取消的写请求数据大小(kB_ccwr/s) ,单位是 KB。
块 I/O 延迟(iodelay),包括等待同步块 I/O 和换入块 I/O 结束的时间,单位是时钟周期。
3.2 iotop
除了可以用 pidstat 实时查看,根据 I/O 大小对进程排序,也是性能分析中一个常用的方法。这一点,我推荐另一个工具, iotop。它是一个类似于 top 的工具,你可以按照 I/O 大小对进程排序,然后找到 I/O 较大的那些进程。
[root@10-9-170-111 ~]# iotop
从这个输出,你可以看到,前两行分别表示,进程的磁盘读写大小总数和磁盘真实的读写大小总数。因为缓存、缓冲区、I/O 合并等因素的影响,它们可能并不相等。剩下的部分,则是从各个角度来分别表示进程的 I/O 情况,包括线程 ID、I/O 优先级、每秒读磁盘的大小、每秒写磁盘的大小、换入和等待 I/O 的时钟百分比等。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/128109.html
摘要:针对应用,性能诊断工具主要分为两层层面和应用层面包括应用代码诊断和诊断。诊断对于主要关注平均负载,使用率,上下文切换次数。常用的应用诊断包括线程堆栈等方面的诊断。 性能诊断工具 性能诊断一种是针对已经确定有性能问题的系统和代码进行诊断,还有一种是对预上线系统提前性能测试,确定性能是否符合上线要求。本文主要针对前者,后者可以用各种性能压测工具(例如 JMeter)进行测试,不在本文讨论范...
摘要:注意会导致性能问题的错误信息。这个命令显示每个的时间使用百分比,你可以用它来检查是否存在负载不均衡。这个命令可以弄清块设备磁盘的状况,包括工作负载和处理性能。这个命令可以用于检查网络流量的工作负载和,以及它是否达到限额了。 原文链接:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html作者是...
摘要:注意会导致性能问题的错误信息。这个命令显示每个的时间使用百分比,你可以用它来检查是否存在负载不均衡。这个命令可以弄清块设备磁盘的状况,包括工作负载和处理性能。这个命令可以用于检查网络流量的工作负载和,以及它是否达到限额了。 原文链接:http://techblog.netflix.com/2015/11/linux-performance-analysis-in-60s.html作者是...
摘要:默认显示和吞吐量信息,定时显示,显示条信息进程性能分析有了以上两个命令,基本上能对磁盘的信息有个全方位的了解了。 本文首发于我的公众号 CloudDeveloper(ID: cloud_dev),专注于干货分享,号内有大量书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。 一文掌握 Linux 性能分析之 CPU 篇 一文掌握 Linux 性能分析之内存篇 ...
本文根据黄炎在2018年7月7日【MySQL技术沙龙 · 成都站】现场演讲内容整理而成。 showImg(https://segmentfault.com/img/bVbdS1D?w=800&h=529); 黄炎爱可生研发总监,深入钻研分布式数据库相关技术,擅长业界相关MySQL中间件产品和开发,以及分布式中间件在企业内部的应用实践。 MySQL中间件性能测试 I 摘要:我今天代表我的团队向大家来...
阅读 1284·2024-02-01 10:43
阅读 370·2024-01-31 14:58
阅读 432·2024-01-31 14:54
阅读 815·2024-01-29 17:11
阅读 2204·2024-01-25 14:55
阅读 1481·2023-06-02 13:36
阅读 2083·2023-05-23 10:26
阅读 469·2023-05-23 10:25