我想對 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體中 CPU 使用率過高的問題進行疑難排解。
解決方法
由於應用程式層級活動、佈建不足的執行個體或監視器不相符,可能會出現 CPU 使用率高的情況。若要解決 CPU 使用率過高的問題,請檢查環境的竊取時間指標。CPU 竊取時間是指執行個體已準備好使用,但由於底層實體資源已指派到其他地方,因此執行個體無法繼續運作的時間。較高的竊取時間會影響應用程式效能,並導致速度變慢、逾時和行為不一致。
若要解決 Linux 執行個體上的 CPU 使用率過高的問題,請採取下列疑難排解動作。
**注意:**您可能會觀察到 Amazon CloudWatch 指標和執行個體層級工具指標之間的差異。發生這種情況的原因是 CloudWatch 在虛擬機器管理程式層級收集指標,但執行個體工具從客戶作業系統 (OS) 內部進行測量。CloudWatch 也以 1-5 分鐘的間隔進行採樣,執行個體工具可以提供逐秒的資料。時間同步和 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%,請檢查您的執行個體是否有設定錯誤問題。
使用 CloudWatch 監控您的 CPU
使用 CloudWatch 監控執行個體效能,然後檢查 CPUUtilization 指標。您也可以檢查 t2 和 t3 執行個體的 CPUCreditUsage 和 CPUCreditBalance。
如果 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,請執行下列其中一項:
最佳化執行個體或應用程式組態
如果特定程序使用高 CPU,則執行下列動作:
- 調查高 CPU 使用率是否為預期行為。
- 檢查應用程式日誌中是否存在錯誤或意外行為。
- 重新啟動應用程式或服務。
如果 CPU 使用率與預期行為一致,但數值仍偏高,請調整應用程式以提高效率。例如,最佳做法是將運算密集型工作負載轉移到不同的執行個體或容器。
管理您的流量和負載模式
如果因流量或負載模式導致高 CPU 使用率反覆發生,請執行下列動作:
相關資訊
如何對因資源過度使用而無法進行狀態檢查的 EC2 Linux 執行個體進行疑難排解?