AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
如何對 Amazon EC2 Linux 執行個體上的高 CPU 使用率問題進行疑難排解?
我想要對 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 執行個體的 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,請將執行個體類型變更為較大的大小。或者,將執行個體類型變更為非突發型執行個體,例如 m、c 或 r 系列。
最佳化您的執行個體或應用程式組態
如果特定程序使用高 CPU,請採取以下動作:
- 調查高 CPU 使用率是否為預期行為。
- 檢查應用程式日誌是否有錯誤或非預期行為。
- 重新啟動應用程式或服務。
如果 CPU 使用率是預期行為但仍然過高,請調整應用程式以提高效率。例如,最佳實務是將大量運算工作負載移到不同的執行個體或容器。
管理您的流量和負載模式
如果高 CPU 使用率因流量或負載模式而反覆發生,請採取以下動作:
- 設定 Amazon EC2 Auto Scaling 群組,以自動管理擴展。
- 使用 Elastic Load Balancing (ELB) 分配流量。
- 使用容器和無伺服器應用程式,將工作負載分割成較小的服務。
相關資訊
相關內容
已提問 3 年前
