当平均利用率较低时,为什么我的 Amazon EC2 实例超出了其网络限制?
上次更新日期:2022 年 8 月 4 日
当平均利用率较低时,为什么我的 Amazon Elastic Compute Cloud(Amazon EC2)实例超出了其网络限制?
简短描述
您可以通过 Elastic Network Adapter(ENA)在支持增强联网的实例上实时查询网络性能指标。这些指标提供自上一次设备重置以来在每个网络接口上队列或丢弃的数据包的累计数量。以下是一些 ENA 指标:
- bw_in_allowance_exceeded:由于入站聚合带宽超过实例的最大值而队列或丢弃的数据包数。
- bw_out_allowance_exceeded:由于出站聚合带宽超过实例的最大值而队列或丢弃的数据包数。
- pps_allowance_exceeded:由于双向每秒数据包数(PPS)超出实例的最大值而队列或丢弃的数据包数。
网络性能规格因实例类型而异。要查看规格,请参阅当前一代实例。 在某些情况下,即使在 Amazon CloudWatch 中看到的平均带宽或 PPS 较低,您也可能会看到队列或丢弃。例如,CloudWatch 中的 NetworkIn、NetworkOut、NetworkPacketsIn 或 NetworkPacketsOut 指标可能会显示未表明达到限制的量。
解决方法
微爆流是上述症状的最常见原因。微爆流是需求的短时峰值,然后是低活动或没有活动的时期。这些突发通常只持续几秒、几毫秒甚至几微秒。在微爆流的情况下,上一节中列出的 CloudWatch 指标不够精细,无法反映它们。
如何计算平均值
上一节中列出的 CloudWatch 中的 EC2 指标每 1 分钟采样一次。这些指标捕获该时段内传输的总字节数或数据包数。然后,这些示例将在 5 分钟的期间内聚合并发布到 CloudWatch。该周期内的每个统计数据都会返回不同的样本值:
- Sum(总和)是所有样本值的总和。
- SampleCount(样本计数)是聚合样本的数量(在本例中为 5)。
- Minimum(最小值)是字节/数据包计数最低的样本值。
- Average(平均值)是平均样本值,通过将总和除以 SampleCount 计算得出。
- Maximum(最大值)是具有最高字节/数据包计数的样本值。
平均吞吐量或 PPS 可以通过两种方式计算:
- 将总和除以周期(例如 300 秒),得出简单的 5 分钟平均值。
- 将最大值除以 60 秒,得出活动最多的一分钟内的平均值。
微爆流如何反映在 CloudWatch 指标中
以下是微爆流的示例,以及它在 CloudWatch 中的反映方式:
- 该实例的网络带宽性能为 10Gbps (1.25Gb/s)。
- 在给定的样本(60 秒)中,20GB 的出站数据传输会占用所有可用带宽,从而导致 bw_out_allowance_exceeded 递增。传输将在大约 20 秒钟内完成,之后不会再发送任何数据。
- 实例对于剩余的 4 个样本保持空闲状态(240 秒)。
在此示例中,5 分钟内的平均吞吐量远低于微爆流期间的平均吞吐量:
SUM(NetworkOut) / PERIOD = ((20 GB * 1 sample) + (0 GB * 4 samples)) / 300 seconds = ~0.066 GB/s * 8 bits = ~0.533 Gbps
即使您根据最高样本计算吞吐量,平均值仍然无法反映吞吐量:
MAXIMUM(NetworkOut) / 60 = 20 GB / 60 seconds = ~0.333 GB/s * 8 bits = ~2.667 Gbps
监控微爆流
要更精细地测量吞吐量和 PPS,请使用操作系统(OS)工具监控网络统计信息。在塑造或活动频繁期间,更频繁地监控网络统计信息。
以下是操作系统工具的示例:
Linux
- sar
- nload
- iftop
- iptraf-ng
Windows
- 性能监视器
CloudWatch 代理可以在 Linux 和 Windows 上使用,用于将这些操作系统级别的网络指标作为自定义指标发布到 CloudWatch。这些指标的发布间隔可以低至 1 秒。注意,高分辨率指标(周期小于 60 秒的指标)会导致更高的费用。有关 CloudWatch 定价的更多信息,请参阅 Amazon CloudWatch 定价。
监控 ENA 提供的网络性能指标是最佳实践。驱动程序版本必须高于或等于 2.2.10(Linux)和 2.2.2(Windows)才能让您查看指标。有关更多信息,请参阅 Linux 和 Windows 的相关页面。
CloudWatch 代理还可以发布 ENA 指标。有关发布适用于 Linux 的 ENA 指标的说明,请参阅收集网络性能指标。对于 Windows,性能监视器中提供了 ENA 指标,而 CloudWatch 代理可以配置为在其中发布任何可用的指标。
防止微爆流
为避免微爆流,需要按发送方调节流量,以使其不超过最大吞吐量或数据包速率。这使得微爆流难以避免。按发送方调节流量通常需要应用程序级别的更改。根据此更改的实施方式,可能需要在发送方处提供并开启对流量调整的操作系统支持。这可能并不总能实现,或者并不总是切合实际。由于在短时间内发送数据包的连接过多,也可能发生微爆流。发生这种情况时,调整单个发送方的速率无济于事。
由于这些原因,最佳实践是监控 ENA 指标。如果经常达到限制,或者如果有证据表明流量调整会影响您的应用程序,请执行以下操作:
- 纵向扩展:改用更大的实例大小。较大的实例通常具有更高的限额。网络优化型实例(带有“n”的实例,例如 C5n)比其各自的非网络优化实例具有更高的限额。
- 横向扩展:将流量分散到多个实例,以减少单个实例的流量和争用。
在 Linux 上,除了上述选项外,高级用户还有一些潜在的缓解选项:您可以单独或组合实现这些选项。在测试环境中对缓解措施进行基准测试是最佳实践,以验证它们能否减少或消除流量调整,而不会对您的工作负载造成负面影响。
- SO_MAX_PACING_RATE:应用程序可以将此套接字选项传递给 setsockopt 系统调用,以指定最大调节速率(每秒字节数)。然后,Linux 内核会调整来自该套接字的流量,使其不超过限制。此选项要求具备以下条件:
- 应用程序代码级别的更改。
- 来自内核的支持。
- 使用公平队列(FQ)队列规则或内核对 TCP 层调节的支持(仅适用于 TCP)。
- 排队规则(qdiscs):qdiscs 负责数据包安排和可选的调整。一些 qdiscs(例如 fq)有助于缓解单个流量造成的流量激增。有关更多信息,请参阅流量控制(TC)手册页面。
- 浅传输(Tx)队列:在某些情况下,浅传输 Tx 队列有助于减少 PPS 调整。它可以通过两种方式实现:
相关信息
- Amazon EC2 实例网络带宽
- 监控 EC2 实例的网络性能(Linux)
- 监控 EC2 实例的网络性能(Windows)