EBS卷没有超出其 CloudWatch 的吞吐量或 IOPS 上限。但是卷遭遇了节流,延迟很高,队列长度也很长。
CloudWatch 每隔一分钟收集一次样本,以此监控所有 Amazon EBS 卷类型的 IOPS(操作次数/秒)和吞吐量(字节/秒)。
如果 EBS 卷爆发高 IOPS 或高吞吐量的时间明显短于收集周期,则会发生微爆。由于卷爆发高 IOPS 或高吞吐量的时间短于收集周期,因此 CloudWatch 不会反映突增情况。
**示例:**预调配 IOPS 为 950 的 IO1 卷(收集周期为一分钟)包含一个在五秒钟内推送 1,000 IOPS 的应用程序。当应用程序达到卷的 IOPS 限制时,Amazon EBS 会对其进行限制。此时,该卷无法处理工作负载,导致队列长度增加、延迟时间变长。
CloudWatch 没有显示该卷突破了 IOPS 限制,因为收集周期为 60 秒。仅在 5 秒钟内发生了 1,000 IOPS。在一分钟收集周期的剩余 55 秒内,该卷保持空闲状态。这意味着整整一分钟内的 VolumeReadOps+VolumeWriteOps 数量为 5000 次(1000*5 秒)。这相当于在一分钟内平均有 83.33 IOPS(5000/60 秒)。
在这种情况下,相同采样时间的 VolumeIdleTime 为 55 秒,因为在收集周期的剩余时间里,卷处于空闲状态。这意味着该采样时间的 5,000 次操作 (VolumeReadOps+VolumeWriteOps) 仅在五秒钟内完成。如果将 5,000 除以 5 来计算平均 IOPS,则得到 1,000 IOPS。容量上限为 1,000 IOPS。
要确定卷是否出现微爆,执行以下操作:
如果公式计算出的值大于卷的最大吞吐量,则会发生微爆。要查看 IOPS 指标,请按照上述步骤操作,并在步骤 4 中添加 VolumeReadOps、VolumeWriteOps 和 VolumeIdleTime。
前面介绍的方法并不总能实时识别微爆。这是因为,即使 VolumeIdleTime 数值较低,卷仍有可能发生微爆。
**示例:**您的卷的激增水平已超出上限。之后,该卷的活跃程度会降至极低水平,但不会在收集期的剩余时间内完全处于闲置状态。尽管发生了微爆,但 VolumeIdleTime 指标并不能反映低活跃水平。
要确认微爆,请使用比 CloudWatch 更精细的操作系统级工具。
Linux
使用 iostat 命令。有关更多信息,请参阅 Linux 手册页网站上的 iostat(1) 。
iostat -xdmzt 1
**注意:**iostat 工具是 sysstat 软件包的一部分。如果找不到 iostat 命令,请运行以下命令,在 Amazon Linux AMI 上安装 sysstat:
$ sudo yum install sysstat -y
要确定是否已达到 IOPS 上限,请查看输出中的 r/s 和 w/s 。如果 r/s + w/s 超出卷的最大吞吐量,则正在发生微爆。