在viewer端进行日志分析的时候,由于日志比较大,每个4.5G,一共9个viewer端,对应9个日志文件,而且判断音频帧和视频帧是否卡顿时,需要的样本也很多,各15000行,分析完成需要5分20秒左右,分析过程中频繁读取磁盘,所以在这里分析一下磁盘读写速度和I/O负载,在做压力测试的时候也可以用得上。
一、看磁盘利用率和吞吐:
iostat -dx 2
-
-d
显示磁盘设备统计 -
-x
显示详细扩展信息,包括 IOPS、利用率等 -
2
每2秒刷新一次数据
输出内容如下:
[ec2-user@ip-10-xx-0-xxx ~]$ iostat -dx 2
Linux 6.1.xxx-147.xxx.amzn2023.x86_64 (ip-10-xx-0-xxx.cn-xxxxx-1.compute.internal) 06/18/25 _x86_64_ (2 CPU)Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
nvme0n1 1021.00 130624.00 0.00 0.00 1.14 127.94 0.50 2.00 0.00 0.00 1.00 4.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.17 41.50Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
nvme0n1 1051.50 134592.00 0.00 0.00 1.10 128.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.16 32.50Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
nvme0n1 1046.00 133824.00 0.00 0.00 1.10 127.94 1.50 14.00 0.50 25.00 1.00 9.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.16 39.00Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
nvme0n1 1055.50 135040.00 0.00 0.00 1.09 127.94 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.15 41.50Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
nvme0n1 1037.00 132736.00 0.00 0.00 1.12 128.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.16 44.50Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
nvme0n1 1034.00 132288.00 0.00 0.00 1.13 127.94 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.17 40.50Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
nvme0n1 1043.50 133568.00 0.00 0.00 1.11 128.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.15 38.00Device r/s rkB/s rrqm/s %rrqm r_await rareq-sz w/s wkB/s wrqm/s %wrqm w_await wareq-sz d/s dkB/s drqm/s %drqm d_await dareq-sz f/s f_await aqu-sz %util
nvme0n1 1019.50 130432.00 0.00 0.00 1.13 127.94 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.16 43.50
在执行 viewer端日志分析脚本 时,对磁盘的 读操作突然变得密集,写操作几乎没有,说明脚本是大量顺序或随机读取日志文件内容,基本没有写入操作。
字段 | 说明 |
---|---|
Device | 磁盘设备名称,如 nvme0n1 |
r/s | 每秒读请求数 (read IOPS) |
rkB/s | 每秒读取的 KB 数量 |
rrqm/s | 每秒合并的读请求数 (read merged requests) |
%rrqm | 读请求中合并请求的百分比 |
r_await | 读请求的平均等待时间,单位 ms |
rareq-sz | 读请求的平均大小,单位 KB |
w/s | 每秒写请求数 (write IOPS) |
wkB/s | 每秒写入的 KB 数量 |
wrqm/s | 每秒合并的写请求数 (write merged requests) |
%wrqm | 写请求中合并请求的百分比 |
w_await | 写请求的平均等待时间,单位 ms |
wareq-sz | 写请求的平均大小,单位 KB |
d/s | 每秒完成的合并请求数 (device I/O) |
dkB/s | 每秒完成的合并请求数据量 |
drqm/s | 每秒设备发起的合并请求数 |
%drqm | 设备发起合并请求占比 |
d_await | 设备请求平均等待时间,单位 ms |
dareq-sz | 设备请求平均大小,单位 KB |
f/s | 每秒完成的 I/O 数 |
f_await | 完成 I/O 平均等待时间,单位 ms |
aqu-sz | I/O 队列长度 |
%util | 设备忙碌百分比(利用率) |
根据输出数据分析:
1、读操作频率高:r/s
稳定在约 1000 次/秒,读数据带宽 rkB/s
在 130000 KB/s(约 130MB/s)左右。说明读负载很大且持续。
2、写操作非常少:w/s
和 wkB/s
基本为 0,说明写入压力很小。
3、合并请求很少:rrqm/s
和 wrqm/s
均为 0,意味着读写请求合并几乎没有发生,可能因为应用请求模式或硬件特性。
4、读请求平均等待时间 r_await
约 1.1 ms:这是比较低的延迟,说明读操作响应很快。
5、读请求大小 rareq-sz
约 128 KB:说明每个读请求读取的数据量较大,适合顺序读或较大块读取。
6、写请求等待时间和大小都为 0 或非常小:写负载轻微。
7、I/O 队列长度 aqu-sz
在 1.15 - 1.17 左右:表示队列内平均有约 1 个请求,队列压力较低。
8、设备利用率 %util
大约 32%-44%:说明磁盘仍有较大余量,没有达到饱和。
9、等待时间 f_await
~40 ms 左右:这是完成 I/O 请求的平均等待时间,相比 r_await
略高,说明整体请求完成时间稍长,可能包含传输、调度等时间。
综合分析:
1、当前的 NVMe 设备在持续处理大量读请求,读请求大小适中且响应延迟较低(1.1 ms),表现出良好的读性能。
2、写操作极少,写负载不明显。
3、磁盘利用率在 30%-45% 之间,说明还有性能富余,磁盘没有处于瓶颈。
4、I/O 队列长度和请求等待时间都保持在合理范围,没有明显的堵塞和性能瓶颈。
5、合并请求为 0,可能表示应用 I/O 模式随机或碎片化,或者 NVMe 硬件本身支持较好的直接调度。
6、%util
超过 70%-80% 可能就会影响性能。
二、查看整体系统资源使用,包括I/O等待:
vmstat 2
每隔2秒采样一次的虚拟内存和CPU等性能指标,输出内容如下:
[ec2-user@ip-10-xx-0-xxx ~]$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st1 0 0 119624 24 3292848 0 0 39 70 0 1 0 0 100 0 01 0 0 110440 24 3303580 0 0 126400 1884 1215 1403 36 1 49 14 00 1 0 121444 24 3293164 0 0 128256 0 1228 1499 38 0 49 13 01 0 0 129556 24 3285156 0 0 128192 0 1200 1565 35 1 51 13 01 0 0 111268 24 3303444 0 0 128192 0 1243 1640 37 1 49 13 01 0 0 119188 24 3295428 0 0 128192 0 1218 1701 34 2 51 13 00 1 0 111584 24 3303164 0 0 128292 0 1245 1502 35 2 50 13 01 0 0 115892 24 3298544 0 0 128208 0 1401 1773 35 2 51 13 01 0 0 121100 24 3284816 0 0 63192 0 1300 95949 41 11 43 5 00 1 0 122336 24 3293140 0 0 134400 0 1262 1840 39 1 49 11 00 1 0 118312 24 3296884 0 0 136576 0 1281 1908 38 1 50 11 01 0 0 110548 24 3304220 0 0 134016 2 1266 1776 38 1 49 11 01 0 0 114820 24 3299828 0 0 137856 0 1516 1957 39 2 49 10 01 0 0 122544 24 3291148 0 0 135936 60 1288 1822 38 1 49 11 00 1 0 122980 24 3292380 0 0 129024 0 1234 1701 36 1 51 13 01 0 0 118744 24 3296260 0 0 136832 0 1278 1909 39 1 49 11 01 0 0 114408 24 3300316 0 0 137984 2 1309 1951 39 2 50 10 01 0 0 116032 24 3297120 0 0 131456 0 1243 1722 36 1 51 13 01 0 0 106232 24 3307820 0 0 128192 0 1216 1534 35 1 50 14 01 0 0 124620 24 3289796 0 0 128320 0 1239 1612 34 2 51 14 01 0 0 112008 24 3302756 0 0 128192 0 1194 1512 38 1 48 13 01 0 0 119960 24 3294700 0 0 128192 0 1233 1595 35 2 50 13 00 1 0 111496 24 3302952 0 0 128320 0 1218 1673 37 1 49 13 01 0 0 109488 24 3304932 0 0 128192 0 1222 1560 36 2 49 13 01 0 0 117460 24 3296996 0 0 128192 0 1352 1532 34 1 51 14 0
列名 | 说明 |
---|---|
procs | |
r | 运行队列中的进程数,即正在等待CPU时间片的进程数(即Runnable) |
b | 阻塞队列中的进程数,即因等待I/O等原因而阻塞的进程数 |
memory | |
swpd | 已使用的交换空间大小 (KB),swap使用情况 |
free | 空闲内存大小 (KB) |
buff | 用作缓冲区的内存大小 (KB) |
cache | 用作缓存的内存大小 (KB) |
swap | |
si | 从交换空间(swap)读到内存的速率 (KB/s) |
so | 从内存写入交换空间的速率 (KB/s) |
io | |
bi | 块设备每秒读入的数据量 (blocks/s) |
bo | 块设备每秒写出的数据量 (blocks/s) |
system | |
in | 每秒的中断次数,包括时钟中断 |
cs | 每秒的上下文切换次数 |
cpu | 所有CPU时间百分比 |
us | 用户态CPU时间百分比(执行非内核代码) |
sy | 系统态CPU时间百分比(执行内核代码) |
id | 空闲CPU时间百分比 |
wa | 等待I/O的CPU时间百分比 |
st | 被虚拟机偷取的CPU时间百分比(即虚拟机暂停时间) |
根据输出数据分析:
1、进程等待和阻塞 (r, b)
(1)r 通常在 0-1,说明CPU运行队列非常短,CPU负载不大,任务调度比较轻松。
(2)b 偶尔出现1,表示有少量进程因为等待I/O而阻塞,但数量不高。
2、内存使用
(1)swpd = 0,说明系统没有使用交换空间,内存充足,无内存压力。
(2)free 内存大约11万到12万KB(约110-120MB),略显偏少,但Linux通常会用缓存(buff + cache)来加速I/O,缓存大小很大(3GB多),所以整体内存充裕。
(3)buff 和 cache 稳定,说明系统缓存正常。
3、交换区活动 (si, so)
(1)si 和 so 始终是0,说明没有发生交换进出,内存足够。
4、I/O 读写 (bi, bo)
(1)bi 数值较大(如12万+),说明有大量磁盘读操作。
(2)bo 很少,说明写操作很少,读密集型负载。
(3)这说明系统在进行较多文件读取或数据访问。
5、系统调用和上下文切换 (in, cs)
(1)in 约1200,cs 约1500-1700,中断和上下文切换量不算大,属于正常水平。
6、CPU使用情况
(1)us (用户态) 占比 30%-40% 左右,说明CPU主要用来执行用户程序。
(2)sy (系统态) 约1%-2%,系统内核调用占用不多。
(3)id (空闲) 约49%-51%,CPU仍有较多空闲时间。
(4)wa (CPU等待I/O时间百分比) 约13%-14%,说明有一定I/O等待,但不算过高(越高说明I/O瓶颈越明显)。
(5)st = 0,没有虚拟机偷取CPU时间。
综合分析:
1、系统负载较轻,CPU空闲时间约一半,运行队列短。
2、内存充足,未使用swap,缓存占用较高,符合Linux的内存管理特点。
3、I/O读操作较多,有一定I/O等待(13%-14% CPU时间),说明磁盘I/O对性能有一定影响,但不严重。
4、系统中断和上下文切换正常。
【总结】
经过上面的分析我们对磁盘的io情况有所了解,如果在压测过程中也可以通过上面的命令观察磁盘的使用情况,来判断磁盘io是否出现瓶颈