跳至內容

如何對 Amazon EC2 Linux 執行個體上的高 CPU 使用率問題進行疑難排解?

2 分的閱讀內容
0

我想要對 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體上的高 CPU 使用率或高竊取時間問題進行疑難排解。

簡短說明

高 CPU 使用率可能因為應用程式層級活動、EC2 執行個體佈建不足或監控不相符而發生。若要疑難排解高 CPU 使用率,請檢查您環境的竊取時間指標。CPU 竊取時間是指執行個體已準備就緒,但因其底層實體資源已配置到其他位置而無法繼續執行的時間。高竊取時間會影響應用程式效能,並導致速度變慢、逾時和行為不一致。

高竊取時間發生的原因如下:

  • 同一個底層實體主機上的相鄰執行個體發生高 CPU 需求。
  • 執行個體 Hypervisor 因請求過多而超載。
  • 爆量執行個體的 CPU 點數餘額已耗盡。

**注意:**Amazon CloudWatch 指標與執行個體層級工具指標之間可能會有差異。這是因為 CloudWatch 會在 Hypervisor 層級收集指標,但執行個體工具是在客體作業系統 (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 網站上的 sar 命令

檢查您的爆量執行個體類型餘額

不同的執行個體類型更容易發生竊取時間問題。例如,持續的高 CPU 使用率可能會耗盡 CPU 點數,並限制爆量執行個體類型 (例如 t2 和 t3) 的效能。

如果您的爆量執行個體類型點數餘額持續偏低或為 0,請將執行個體類型變更為較大的大小。或者,將執行個體類型變更為非突發型執行個體,例如 m、c 或 r 系列。

最佳化您的執行個體或應用程式組態

如果特定程序使用高 CPU,請採取以下動作:

  • 調查高 CPU 使用率是否為預期行為。
  • 檢查應用程式日誌是否有錯誤或非預期行為。
  • 重新啟動應用程式或服務。

如果 CPU 使用率是預期行為但仍然過高,請調整應用程式以提高效率。例如,最佳實務是將大量運算工作負載移到不同的執行個體或容器。

管理您的流量和負載模式

如果高 CPU 使用率因流量或負載模式而反覆發生,請採取以下動作:

相關資訊

如何對因資源過度使用,而導致 EC2 Linux 執行個體狀態檢查失敗的問題進行疑難排解?

AWS 官方已更新 9 個月前