跳至内容

如何对 Amazon EC2 Linux 实例的高 CPU 使用率问题进行故障排除?

2 分钟阅读
0

我想对 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例的高 CPU 使用率或高窃取时间问题进行故障排除。

简短描述

CPU 使用率高可能是由于应用程序级活动、EC2 实例预置不足或监控不匹配而导致。要对 CPU 使用率高的问题进行故障排除,请检查您的环境的窃取时间指标。CPU 窃取时间是指实例已准备就绪,但因底层物理资源被分配到其他位置而导致无法继续的时间。高窃取时间会影响应用程序性能,导致速度变慢、超时和行为不一致。

出现高窃取时间的原因如下:

  • 同一底层物理主机上的相邻实例存在高 CPU 需求。
  • 实例虚拟机管控程序请求过载。
  • 可突增实例的 CPU 积分余额已耗尽。

**注意:**您可能会注意到 Amazon CloudWatch 指标与实例级工具指标之间存在差异。出现此差异是因为 CloudWatch 在虚拟机监控程序级别收集指标,而实例工具在客户机操作系统 (OS) 内部进行测量。此外,CloudWatch 以 1-5 分钟的时间间隔进行采样,而实例工具可提供逐秒级数据。时间同步和 CPU 使用率计算方法也可能会导致差异。

解决方法

要解决您的 Linux 实例的高 CPU 使用率问题,请执行以下故障排除操作。

测量配置的 CPU 窃取时间

要查看您的配置的窃取时间,请运行以下命令:

top

输出示例:

top - 14:23:45 up 7 days, 2:03, 1 user, load average: 0.45, 0.50, 0.45
Tasks: 105 total, 1 running, 104 sleeping, 0 stopped, 0 zombie
%Cpu(s): 5.3 us, 2.1 sy, 0.0 ni, 85.6 id, 1.2 wa, 0.0 hi, 0.3 si, 5.5 st
MiB Mem : 3949.2 total, 146.7 free, 1367.8 used, 2434.7 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 2312.8 avail Mem

在输出中,检查 st 值以获取 CPU 窃取时间的百分比。在上述示例中,窃取时间占所有 CPU 时间的 5.5%。最佳做法是将窃取时间控制在 5% 以下。如果您的窃取时间持续超过 10%,请检查您的实例是否存在配置错误问题。

对于需要专用资源的工作负载,最佳做法是使用 Amazon EC2 专属主机

使用 CloudWatch 监控您的 CPU

使用 CloudWatch 监控您的实例性能。检查您实例的 CPUUtilization 指标,以及 t2 和 t3 实例的 CPUCreditUsageCPUCreditBalance 指标。

如果 CloudWatch 指标与您在实例中看到的指标之间存在差异,请验证您是否正确配置了 CloudWatch 代理。检查 /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log 中是否存在错误。

**注意:**默认情况下,CloudWatch 不提供窃取时间指标。相反,您必须配置 CloudWatch 代理以添加自定义指标。

使用实例级工具监控实例

要使用更友好的界面来查看配置的窃取时间,请使用 htop 而不是 top 命令。要下载 htop,请参阅 GitHub 网站上的 htop-dev/htop

要查看系统级资源(例如内存、分页、I/O 和 CPU)随时间的详细使用情况,请运行以下命令:

vmstat

输出示例:

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b  swpd      free buff cache  si so bi bo in cs us sy id wa st
0 0    0    150272 97545 2394124   0  0  0  5  1  2 5 2 86  1 6
0 0    0    150272 97545 2394124   0  0  0  0 435 625 4 2  88 0 6

**注意:**要查看窃取时间,请检查 st 列。

要查看有关您的资源的历史数据,请运行以下命令:

sar

输出示例:

 $ sar -P ALL 1 3
Linux 5.4.0-1045-aws (ip-10-0-1-100) 04/22/2025 _x86_64_ (2 CPU)
4:25:00 CPU %user %nice %system %iowait %steal %idle
14:25:01 all 4.50 0.00 2.00 1.00 5.50 87.00
14:25:01 0 4.00 0.00 2.00 1.00 6.00 87.00
14:25:01 1 5.00 0.00 2.00 1.00 5.00 87.00

**注意:**您可以配置 sar 以定期收集 CPU 指标。有关详细信息,请参阅 Red Hat 网站上的 The sar command(sar 命令)

检查您的可突增实例类型余额

不同的实例类型更容易出现窃取时间问题。例如,持续的高 CPU 使用率会耗尽 CPU 积分,并导致可突增实例类型(例如 t2 和 t3)的性能受到限制。

如果您的可突增实例类型的积分余额持续较低或为 0,请将实例类型更改为更大的大小。或者,将实例类型更改为非可突增实例,例如 m、c 或 r 系列。

优化您的实例或应用程序配置

如果某个特定进程占用高 CPU,请执行以下操作:

  • 调查高 CPU 使用率是否是预期行为。
  • 检查应用程序日志中是否存在错误或意外行为。
  • 重新启动应用程序或服务。

如果 CPU 使用率是预期行为,但仍然过高,请优化您的应用程序以提高效率。例如,最佳做法是将计算密集型工作负载转移到其他实例或容器。

管理您的流量和负载模式

如果由于流量或负载模式而反复出现高 CPU 使用率问题,请执行以下操作:

相关信息

如何对因资源过度使用而未通过状态检查的 EC2 Linux 实例进行故障排除?

AWS 官方已更新 9 个月前