![Olawale Olaleye Olawale Olaleye](https://d1.awsstatic.com/xuefezha-jennie/%e7%ba%a7%e5%88%ab_level%201.01c35fea97656a6beac50b0c8ae81e8afc1eedef.png)
![](https://d1.awsstatic.com/xuefezha-jennie/Group%20281.67a8494bd80a4bd979e37efcb490ada486dd72ae.png)
在业务日益依赖延迟敏感型应用程序来处理关键工作负载的情况下,需要迅速解决各种可能会影响应用程序效率的性能瓶颈,因此你必须了解整个技术栈的性能。鉴于存储设备的性能和稳定性会直接影响应用程序的效率、可靠性、可扩展性以及用户体验,因此企业必须能够在存储层上收集和分析详细的遥测数据。存储层上的可观察性是对传统应用程序和操作系统监控的补充,可以帮助企业确保其整个基础设施具有强大的性能、稳定性,以及快速解决问题的能力。
用户可以将 Amazon Elastic Block Store (Amazon EBS) 这一易用型块存储服务用作高性能事务型工作负载(如数据库、企业应用程序和延迟敏感型操作)的主要存储设备类型。这些工作负载均需要持续可靠的存储性能,因此对 EBS 卷的监控和观察至关重要。借助实时监控功能,你能够全面了解关键性能指标(如延迟、吞吐量和 IOPS),从而主动检测和解决各种潜在瓶颈或问题。
在本文中,我们将讨论如何使用 Amazon EBS 的详细性能统计数据(一组亚分钟级粒度的新 EBS 卷监控指标)来帮助你实时了解 EBS 卷性能。你可以直接通过连接到 Amazon Elastic Compute Cloud (Amazon EC2) 实例的 Amazon EBS NVMe 设备访问这些统计数据,并将这些统计数据用于监控存储级别的 I/O 性能。我们还提供了一些示例,用于展示如何根据这些统计数据快速评估 EBS 卷的运行状况和识别性能瓶颈,从而采取相应的措施提高应用程序的可靠性和性能。
解决方案概述
我们提出一种解决方案,在实例级别上应用 Amazon EBS 详细性能统计能力。该方案可增强 EC2 Nitro 实例上运行的延迟敏感型应用程序的可观察性和故障排除能力。我们运行新设计的 ebsnvme 脚本来收集有关 I/O 操作数、延迟和队列长度等高频统计数据,从而主动发现和排除故障。
该解决方案示例中展示了一些如何使用这些细粒度指标的示例,演示如何验证 EBS 卷的响应速度,以便你能够快速发现任何 I/O 中断。此外,该解决方案还可帮助你识别存储性能瓶颈,可用于优化 EBS 卷和 EC2 实例配置,以满足你的工作负载需求。
前提条件
该解决方案中需要设置一个 EC2 Nitro 实例和挂载一个 EBS 卷,从而收集和访问该 EBS 卷的详细性能统计数据。如果你使用的是 Amazon EC2 实例,那么你可能已完成此设置。完成以下步骤,部署所需组件:
- 启动一个 EC2 Nitro 实例(或使用一个现有的 Nitro 实例),并连接到该实例。可以通过 SSH 连接到该实例。
- 找到与你要查询 Amazon EBS 统计数据对应的 EBS 卷关联的 NVMe 设备。例如,可以在 CLI 中运行 nvme-cli 命令来查询实例上的所有 NVMe 设备。
$ sudo nvme list
下图输出示例展示了执行 list 命令后,输出的实例上的 NVMe 设备信息及其对应的卷 ID。
![](https://d1.awsstatic.com/meixuadu/uncover-new-performance-insights/Picture1-1.dbcf771772e803d155720350aa263c01a73841a9.png)
在此演示中,示例应用程序使用的 EBS 卷的 ID 为 vol-02b51b6b2cb16aab1,与之关联的 NVMe 设备则为 /dev/nvme1n1。
3. 将 ebsnvme 脚本复制到 EC2 实例上(必要时,可从此 GitHub 链接下载此脚本)。
4. 使用正确的权限运行 ebsnvme 脚本,并将设备路径作为一个参数传递。返回的输出内容如下图所示(通过向脚本指定 -j 或 --json 参数,可以获得 JSON 输出)。
$ sudo ./ebsnvme stats /dev/nvme1n1 –json
或者,可以将 –interval 或 -i 参数与 ebsnvme 脚本结合使用,根据指定的时间间隔轮询统计数据。
$ sudo ./ebsnvme stats /dev/nvme1n1 --interval 15
以下是 NVMe 日志输出示例的一部分,其中显示的统计数据包括累计读/写操作数、字节数和用于处理读/写操作的时间(以微秒为单位),以及应用程序性能需求超过 Amazon EBS 或 Amazon EC2 预配的 IOPS 或吞吐量限制值的时间长度(微秒)。
![](https://d1.awsstatic.com/meixuadu/uncover-new-performance-insights/Picture2-1.bd951c57983502946fa2de66c33b25986a0c420e.png)
此外,还包括了读写 I/O 延迟数据统计直方图,其中每一行代表在一个特定时间段(以微秒为单位)内完成的 I/O 操作总数。
![](https://d1.awsstatic.com/meixuadu/uncover-new-performance-insights/Picture3%20(1).f310e205953de512189e728fd49bd9273a34b334.png)
这些统计数据显示的是此次命令运行前累计的计数。可以根据业务需求,设置运行命令的时间间隔,例如每 15 秒运行一次。每次输出的内容都会反映各指标对应的最新累计数值。通过计算最后两次输出的统计数据之间的差异,可以了解该存储卷在给定 15 秒期间的性能概况。
从 Amazon EBS 详细性能统计数据中获取洞察
我们已经根据这些详细性能统计指标设置了监控,下面我们演示这些统计数据的不同使用方式。
如上一小节中所述,可以查看详细统计数据输出中的 I/O 延迟直方图,观察统计间隔期间的 I/O 延迟分布情况。此外,你还可以根据读/写操作和耗时统计数据来计算平均延迟值。通过详细统计数据,可以查看亚分钟级粒度的平均延迟。
以下是另外两种使用详细统计数据来揭示关键性能指标的方法。在场景 1 中,我们将监控 Amazon EBS 的 I/O 性能,从而观测 EBS 卷是否没有响应 I/O 操作。在场景 2 中,我们将跟踪性能统计数据,从而检测工作负载是否超过 EC2 实例或 EBS 卷的预配性能限制。超过性能限制时,可能会导致延迟增加。
场景 1:识别 EBS 卷的无响应状态
在此场景中,我们将讨论如何根据 Amazon EBS 详细性能统计数据识别 EBS 卷在何时不响应 I/O 操作,以便你根据需要及时采取措施。如果观察到卷在多个时间段内无响应,你可以等待 AWS 解决该问题,也可以自行采取措施,如更换相关卷或者停止并重启卷所挂载到的实例。在大多数情况下,当卷无响应时,Amazon EBS 会在几分钟内自动诊断问题并恢复卷。
要确定卷是否无响应,可以执行以下步骤来确定卷 I/O 是否中断:
- 选择要进行故障排查的 EBS 卷对应的 NVMe 设备
- 按业务所需时间间隔收集设备上的统计数据
- 比较统计数据,检查 EBS 卷是否无响应
步骤 1:选择要进行故障排查的 EBS 卷对应的 NVMe 设备
- 使用 NVMe CLI 命令查询实例上的 EBS 卷关联的 NVMe 设备。
步骤 2:按业务所需时间间隔收集设备上的统计数据
- 使用 ebsnvme 命令直接从设备上收集 Amazon EBS 详细性能统计数据:
$ sudo ebsnvme stats /dev/nvme1n1
步骤 3:比较统计数据,检查 EBS 卷是否无响应
- 在此场景下,需要从输出中查看以下三个指标:Total Read Ops(总读操作数)、Total Write Ops(总写操作数)和 Queue Length(队列长度)。
![](https://d1.awsstatic.com/meixuadu/uncover-new-performance-insights/Picture4%20(1).590a7d18c6cdc2ba88e22a6b0b3dd54e51d9b5e9.png)
2. 在特定时间间隔(例如 15 秒)后执行相同的 ebsnvme 命令,然后比较 Amazon EBS 卷的总读/写 I/O 变化情况。
![](https://d1.awsstatic.com/meixuadu/uncover-new-performance-insights/Picture5%20(1).65d78aa5f6ae4e7c5e6a18d1ec8a0fd1e4a211d1.png)
3. 从约每隔 15 秒收集一次的详细性能统计数据中,我们得到以下重要观察结果:
- Total Read Ops(总读操作数)从 340086743 增加到 340174856,表明在这 15 秒内完成了 88113 次读操作。
- Total Write Ops(总写操作数)从 340051578 增加到 340139785,表明在这 15 秒内完成了 88207 次写操作。
- Queue Length(队列长度)分别为 11 和 9 两个非零值,这个指标表示应用程序向 EBS 卷发出了 I/O 请求。如果队列长度逐渐增加,则表示排队的 I/O 请求数在增加。
然后,这个统计数据表示 EBS 卷仍在处理其接收的 I/O 请求,因此可知 EBS 卷不是造成所观察到的应用程序性能降级的原因。如果队列长度增加,并且在相应期间处理的读/写操作数为 0,则表明 EBS 卷无响应。
如果要验证识别 EBS 卷无响应的机制,请参阅使用 AWS Fault Injection Service 在 Amazon EBS 上进行混沌工程实验博文,其中介绍了如何设置 AWS Fault Injection Service 进行暂停 I/O 实验。
场景 2:识别存储设备性能瓶颈
可以根据应用程序性能需求,依据 Amazon EBS 详细性能统计数据为 EBS 卷和 EC2 实例配置合适的性能。EBS Volume Performance Exceeded(EBS 卷性能超标)和 EC2 Instance EBS Performance Exceeded(EC2 实例 EBS 性能超标)统计数据表示在对应的时间段内,工作负载所需 IOPS 或吞吐量持续高于卷或实例预配性能容量的时间长度。如果工作负载需求超过了卷或实例的预配性能,可能会导致工作负载延迟增加。对于此场景,应考虑使用与场景 1 中相同的检测方式。
完成以下步骤,检查是否预配了合适 EBS 卷性能:
- 选择要检查的 EBS 卷对应的 NVMe 设备
- 按业务所需时间间隔收集设备上的统计数据
- 比较统计数据,检查工作负载处理需求是否超出了 EBS 卷的预配性能
步骤 1:选择要检查的 EBS 卷对应的 NVMe 设备
- 此步骤与之前在场景 1 中的步骤 1 相同。
步骤 2:按业务所需时间间隔收集设备上的统计数据
- 与在场景 1 中的步骤 2 相似,比较两个时间点之间的详细性能统计数据。
- 观察 EBS NVMe 设备的 EBS Volume Performance Exceeded(EBS 卷性能超标)和 Instance EBS Performance Exceeded(EC2 实例 EBS 性能超标)统计数据。使用“-interval”选项,可每隔 <interval_seconds> 指定秒数解析一次输出,并输出该时间间隔内的统计数据之间的差异:
$ ebsnvme stats /dev/nvme1n1 --interval 15
步骤 3:比较统计数据,检查工作负载处理需求是否超出了 EBS 卷的预配性能
- 在以下示例输出内容截图中,可以看到,EBS Volume Performance Exceeded(EBS 卷性能超标)的统计数据增加了 5349286 微秒。这表明,在 EBS 卷 vol-02b51b6b2cb16aab1 上运行的工作负载尝试处理的 IOPS 超过了底层 EBS 卷的预配值,这可能会影响卷的 I/O 延迟。建议你提高卷性能容量,确保有足够的预配性能来满足应用程序的需求。
![](https://d1.awsstatic.com/meixuadu/uncover-new-performance-insights/Picture6%20(1).5595d0db3aaf7e75578327c5439682b667e30fa1.png)
2. 在 EC2 实例上运行另一个不同的工作负载。从以下示例输出中可以看到工作负载所需性能超过了卷所挂载的 EC2 实例的预配 IOPS 性能。在这种情况下,升级到更大的实例规格可以提高应用程序性能。
![](https://d1.awsstatic.com/meixuadu/uncover-new-performance-insights/Picture7%20(1).1c29df5279674fa05acb480ff6ba5c57a8728953.png)
3. 可以使用 Oracle 合成负载生成器 Silly Little Oracle Benchmark (SLOB) 模拟 Oracle 数据库上的工作负载,并监控 Amazon EBS 统计数据,确定可能发生性能瓶颈的卷或实例。
要避免应用程序出现性能瓶颈,必须正确配置实例和卷。有关不同 EBS 卷类型的更多信息,请参阅 EBS 卷类型文档;要了解如何选择最适合你的应用程序的最佳 EC2 实例和 EBS 卷组合,请参阅 Amazon EBS 优化文档。这些统计的最细粒度可为 1 秒,使你能够进行有效地实时监测,并根据需要修改卷,优化卷配置。
清理资源
如果你为此次实验创建了 EC2 实例和 EBS 卷,请务必在实验完成后及时终止并删除相应实例和卷,以避免产生后续费用。
总结
在本文中,我们提出了一种解决方案,用于获取实例级别的 Amazon EBS 卷的细粒度性能统计数据。Amazon EBS 详细性能统计让你能以亚分钟级粒度实时查看底层 EBS 卷的性能,从而快速找出导致 EBS 卷上运行的应用程序中断的原因。此外,你还可以根据这些统计数据,识别由于工作负载处理需求超过 Amazon EC2 或 EBS 卷的预配 IOPS 或吞吐量限值而导致的应用程序性能瓶颈。除了可以提供 1 分钟级粒度的卷性能洞察的 Amazon CloudWatch 指标外,你还可以使用其他工具有效识别和解决 Amazon EBS 卷存储问题。
更多教程
快速搭建容量高达 35GB 的免费个人网盘
本教程将介绍如何搭建一个没有使用限制的免费私人网盘。
构建企业专属智能客服机器人
本文将演示如何结合多种服务,打造企业专属的智能客服。
使用生成式 AI 构建多语言问答知识库
使用多种服务,构建可汇总搜索结果的多语言知识库。
免费套餐
AWS 海外区域
拓展海外业务或个人体验
免费使用 100 余种云产品或服务, 长达 12 个月
AWS 中国区域
发展中国业务
免费使用 40 余种核心云服务产品,长达 12 个月