為什麼我的 EC2 Linux 執行個體因為資源過度使用而變得無回應?
上次更新日期:2021 年 10 月 25 日
我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體因為資源過度使用而變得無回應。如何防止這種情況?
簡短描述
執行個體變得無回應通常有幾個原因:
記憶體:依預設,EC2 執行個體沒有配置交換空間。記憶體不足可叫用 Linux 記憶體不足 (OOM) 管理員。OOM 管理員會終止處理程序,例如資料庫、Web 伺服器或 SSH 服務。
聯網:如果沒有網路,您的系統就無法回應狀態檢查中的 ARP 請求。發生這種情況時,您的執行個體無法與其他主機通訊。
Amazon Elastic Block Store (Amazon EBS):如果沒有磁碟輸入/輸出,讀/寫指令會卡住。例如,建立暫存檔案、從系統程式庫或資料庫讀取。
CPU:以上所有任務都需要 CPU 正常工作。CPU 使用率長時間達到 100% 會導致核心無法執行正常的作業系統操作。
這些問題也可能會累積,形成滾雪球效應。比如,您的記憶體不足,因而 OOM 管理員終止重要的處理程序。此時,仰賴已停止的第一個處理程序的第二個處理程序會啟動更多的 CPU 週期。如果這個任務與磁盤相關,此週期也可能耗盡 EBS 磁碟區。此外,這個問題可能會傳輸到期待來自無回應執行個體的通訊的另一個執行個體。
解決方案
如果您的系統經常因資源使用過度而變得無回應,請執行下列操作:
收集資訊
- 使用 Amazon CloudWatch 等監控工具觀察高資源使用率趨勢和模式。
- 如果您有多個服務,而且不確定是哪一個服務過度使用資源,請安裝一個公用程式,例如 atop。
- 檢閱您的應用程式和作業系統日誌。這些日誌通常位於 /var/log/。
- 檢閱命令的歷史記錄,以確認是否有人為錯誤。命令歷史記錄通常位於 ~/.bash_history 檔案中。
- 透過執行 crontab -l 命令檢閱 cronjob。
依據取得的資料採取行動
- 您可能會發現您的應用程式需要變更組態或程式碼,才能最佳化資源使用率。
- 如果您的處理程序出於合理的原因 (例如使用者數量龐大) 而使用大量資源,請考慮升級執行個體。
AWS Compute Optimizer 是產生建議執行個體大小的有用來源。您也可以考慮使用 Amazon EC2 Auto Scaling 進行水平擴展。 - 如果想要更多地了解使用者命令和組態變更,可以安裝「稽核」(audit) 來追蹤變更。
防止未來過度使用
- 在生產環境中部署新的應用程式之前,請建立一個測試環境和基準來確定必要的運算、記憶體、EBS 和網路。
- 根據您的基準進行部署,同時建置容錯能力。如需詳細資訊,請參閱下列內容:
在分散式系統中設計防止故障的互動
教學:設定擴展和負載平衡應用程式 - 繼續監控您的執行個體,並建立特定資源使用量閾值警示。