EC2 Linux インスタンスがリソースの過剰使用が原因で応答しなくなるのはなぜですか?
最終更新日: 2021 年 10 月 25 日
Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスは、リソースの過剰使用が原因で応答しなくなります。これを防ぐにはどうすればよいですか?
簡単な説明
インスタンスが応答しなくなる原因には、いくつかの一般的な原因があります。
メモリ:EC2 インスタンスには、デフォルトでスワップ領域が割り当てられていません。メモリが不足すると、Linux メモリ不足 (OOM) マネージャーが起動する可能性があります。OOM マネージャーは、データベース、ウェブサーバ、SSH サービスなどのプロセスを終了します。
ネットワーク:ネットワークがないと、システムはステータスチェックからの ARP 要求に応答できません。これが発生すると、インスタンスは他のホストとの通信に失敗します。
Amazon Elastic Block Store (Amazon EBS): ディスク I/O がないと、読み取りまたは書き込み命令がスタックします。たとえば、一時ファイルの作成、システムライブラリからの読み取り、またはデータベースなどです。
CPU: 上記のすべてのタスクが動作するには CPU 時間が必要です。長時間の CPU 使用率が 100% の場合、カーネルは通常のオペレーティングシステム操作を実行できません。
これらの問題は、雪だるま効果に蓄積される可能性もあります。例えば、メモリが不足し、OOM マネージャーが重要なプロセスを終了するとします。これで、停止した最初のプロセスに依存する 2 番目のプロセスは、はるかに多くの CPU サイクルを開始します。このタスクがディスク関連である場合、このサイクルは EBS ボリュームを使い果たす可能性があります。また、この問題は、応答しないインスタンスからの通信を想定している別のインスタンスに転送される可能性があります。
解決方法
リソースの過剰使用が原因でシステムが応答しなくなることが多い場合は、次の手順を実行します。
情報を収集する
- Amazon CloudWatch などのモニタリングツールを使用して、リソース使用率が高い傾向とパターンを観察します。
- 複数のサービスがあり、どれがリソースを過剰に使用しているかわからない場合は、atop などのユーティリティをインストールします。
- アプリケーションとオペレーティングシステムのログを確認します。これらのログは通常 /var/log/ にあります。
- コマンドの履歴を確認して、ヒューマンエラーがないかどうかを確認します。コマンド履歴は通常 ~/.bash_history ファイルにあります。
- crontab-l コマンドを実行して、cronjobs を確認します。
取得したデータに基づく行為
- リソース使用率を最適化するために、アプリケーションの設定やコードの変更が必要になることがあります。
- ユーザーの摂取量が多いなどの正当な理由でプロセスが大量のリソースを使用している場合は、インスタンスのアップグレードを検討してください。
AWS Compute Optimizer は、推奨されるインスタンスサイズを生成するのに便利なソースです。Amazon EC2 Auto Scaling を使用して水平方向にスケーリングすることも検討できます。 - ユーザーコマンドや設定の変更をより可視化したい場合は、`audit` をインストールして変更を追跡することができます。
将来の過剰使用を防ぐ
- 新しいアプリケーションを本番環境にデプロイする前に、テスト環境とベンチマークを作成して、必要なコンピューティング、メモリ、EBS、およびネットワークを判断します。
- 耐障害性を構築しながら、ベンチマークに従ってデプロイします。詳細については、以下を参照してください。
障害を防ぐために分散システムでの操作を設計する
チュートリアル: スケーリングとロードバランシングを使用するアプリケーションのセットアップ - インスタンスのモニタリングを続行し、特定のリソース使用量のしきい値に対してアラームを作成します。