如何确定我的 Amazon EBS 卷是否处于微爆状态,并防止这种情况发生?
我有一个 Amazon Elastic Block Store (Amazon EBS) 卷,这个卷没有超出其 Amazon 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。
要确定您的卷是否出现微爆,请执行以下操作:
- 使用 CloudWatch 指标来鉴别可能发生的微爆情况。
- 使用 CloudWatch 获取微爆事件。
- 使用操作系统级工具确认微爆。
- 根据应用程序的需求更改卷大小或类型,以防微爆。
解决方法
使用 CloudWatch 指标来鉴别可能发生的微爆情况
- 检查 VolumeIdleTime 指标。此指标表示在指定时间段内未提交任何读取或写入操作的总时长(单位:秒)。如果 VolumeIdleTime 数值较高,则该卷将在收集期的大部分时间内保持空闲状态。如果同一采样时间的 IOPS 或吞吐量足够高,则表明可能发生了微爆。
除了适用于吞吐量的 VolumeIdleTime 指标之外,还有 VolumeReadBytes 和 VolumeWriteBytes 指标。 - 使用以下公式计算卷处于活动状态时达到的平均吞吐量:
以“字节/秒”为单位的估计平均吞吐量 =(总和 (VolumeReadBytes) + 总和 (VolumeWriteBytes))/(周期 - 总和 (VolumeIdleTime))
除了适用于 IOPS 的VolumeIdleTime 指标之外,还有 VolumeReadOps 和 VolumeWriteOps 指标。 - 使用以下公式计算卷处于活动状态时达到的平均 IOPS:
以“操作次数/秒”为单位的估计平均 IOPS =(总和 (VolumeReadOps) + 总和 (VolumeWriteOps))/(周期 - 总和 (VolumeIdleTime))
使用 CloudWatch 获取微爆事件
- 打开 CloudWatch 控制台。
- 选择全部指标。
- 使用卷 ID 搜索受影响的卷。
- 要查看吞吐量指标,请先选择浏览,然后再添加 VolumeReadBytes、VolumeWriteBytes 和 VolumeIdleTime。
- 选择绘成图表的指标。
- 对于统计数据,选择总和,对于周期,选择 1 分钟。
- 对于添加数学,选择从空表达式开始。
- 在表达式的详细信息中,输入以“字节/秒”为单位的估计平均吞吐量公式的图形 ID。例如,(m1+m2)/(60-m3)。
如果公式计算出的值大于卷的最大吞吐量,则会发生微爆。要查看 IOPS 指标,请按照上述步骤操作,并在步骤 4 中添加 VolumeReadOps、VolumeWriteOps 和 VolumeIdleTime。
使用操作系统级工具确认微爆
前面介绍的方法并不总能实时识别微爆。这是因为,即使 VolumeIdleTime 数值较低,卷仍有可能发生微爆。
**示例:**您的卷的激增水平已超出上限。之后,该卷的活跃程度会降至极低水平,但不会在收集期的剩余时间内完全处于闲置状态。尽管发生了微爆,但 VolumeIdleTime 指标并不能反映低活跃水平。
要确认微爆,请使用比 CloudWatch 更精细的操作系统级工具。
Linux
使用 iostat 命令。有关更多信息,请参阅 Linux 手册页网站上的 iostat(1)。
1. 要以秒级粒度报告所有挂载卷的 I/O 统计信息,请运行以下命令:
iostat -xdmzt 1
**注意:**iostat 工具是 sysstat 软件包的一部分。如果找不到 iostat 命令,请运行以下命令,在 Amazon Linux AMI 上安装 sysstat:
$ sudo yum install sysstat -y
2. 要确定是否已达到吞吐量上限,请查看输出中的 rMB/s 和 wMB/s。如果 rMB/s + wMB/s 超出卷的最大吞吐量,则正在发生微爆。
要确定是否已达到 IOPS 上限,请查看输出中的 r/s 和 w/s 。如果 r/s + w/s 超出卷的最大吞吐量,则正在发生微爆。
Windows
在 Windows 性能监视器中运行 perfmon 命令。有关更多信息,请参阅确定您的 IOPS 和吞吐量要求。
根据应用程序的需求更改卷大小或类型,以防微爆
更改卷的类型和大小,使其适合所需的 IOPS 和吞吐量。有关卷类型及其相应 IOPS 和吞吐量限制的更多信息,请参阅 Amazon EBS 卷类型。实例向所有已连接的 EBS 卷进行推送时,对可推送的 IOPS/吞吐量有一定限制。
最佳做法是根据工作负载对您的卷进行基准测试,以验证哪些卷类型可以在测试环境中安全地容纳您的工作负载。有关更多信息,请参阅对 EBS 卷进行基准测试。
相关内容
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 8 个月前
- AWS 官方已更新 2 个月前