EC2 Linux インスタンスが到達不能で、そのステータスチェックの一方、または両方が失敗するのはなぜですか?

最終更新日: 2021 年 9 月 8 日

Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンスが到達不能で、ステータスチェックの一方、または両方が失敗します。ステータスチェックの失敗をトラブルシューティングするにはどうすればよいですか?

簡単な説明

Amazon EC2 は 2 つのステータスチェックを使って各 EC2 インスタンスの正常性を監視します。

システムステータスチェック

システムステータスチェックは、インスタンスが実行されている基盤となるホストに関する問題を検出します。このステータスチェックは、ネットワーク、ハードウェア、またはソフトウェアの問題が原因で基盤となるホストが応答しない、または到達不能である場合に失敗します。

インスタンスステータスチェック

インスタンスステータスチェックの失敗は、インスタンスの到達可能性に問題があることを示しています。この問題は、次のようなオペレーティングシステムレベルのエラーが原因で発生します。

  • オペレーティングシステムの起動の失敗
  • ボリュームが正しくマウントされていない
  • CPU とメモリを使い果たした
  • カーネルパニック

警告: 以下の解決方法の中には、インスタンスの停止と起動が必要なものもあります。インスタンスの停止と起動を行う前に、次の点に注意してください。

  • インスタンスを停止すると、インスタンスストアデータが失われます。インスタンスが Instance Store-Backed である場合、またはデータを含むインスタンスストアボリュームがインスタンスにある場合、インスタンスを停止するとデータが失われます。詳細については、インスタンスのルートデバイスタイプの判別をご参照ください。
  • インスタンスが Amazon EC2 Auto Scaling グループの一部である場合、インスタンスを停止するとインスタンスが終了することがあります。Amazon EMR、AWS CloudFormation、または AWS Elastic Beanstalk を使用してインスタンスを起動した場合、インスタンスは AWS Auto Scaling グループの一部である可能性があります。このシナリオでのインスタンスの終了は、Auto Scaling グループのインスタンスのスケールイン保護の設定に応じて異なります。インスタンスが Auto Scaling グループの一部である場合は、解決手順を開始する前に、一時的に Auto Scaling グループからインスタンスを削除してください。
  • インスタンスの停止と起動を行うと、パブリック IP アドレスが AWS 動的 IP プールに解放されます。インスタンスに外部のトラフィックをルーティングするときは、パブリック IP アドレスではなく Elastic IP アドレスを使用することがベストプラクティスです。Route 53 を使用している場合は、パブリック IP が変更されたときに Route 53 DNS レコードを更新する必要がある場合があります。

詳細については、「インスタンスの停止と起動 - 概要」を参照してください。

解決方法

1.    インスタンスのステータスチェックメトリクスを表示して、インスタンスのステータスチェックまたはシステムステータスチェックが失敗したかどうかを判断します。

2.    システムステータスチェックが失敗した場合は、「インスタンスはシステムステータスチェックに失敗しました」を参照してください。どのようにトラブルシューティングすればよいですか?

インスタンスのステータスチェックが失敗した場合は、インスタンスのシステムログをチェックして、失敗の原因を特定します。システムログで見つかったデータに応じて、次のいずれかの解決方法を使用します。

オペレーティングシステムの起動の失敗

ボリュームが正しくマウントされていない

次の例に示すように、マウントポイントが正しくマウントできないために、インスタンスのステータスチェックが失敗する場合があります。

[FAILED] Failed to mount /
See 'systemctl status mnt-nvme0n1p1.mount' for details.
[DEPEND] Dependency failed for Local File Systems.

CPU とメモリを使い果たした

高い CPU 使用率

CPUUtilization メトリクスが 100% または 100% に近い場合、インスタンスにはカーネルを実行するのに十分なコンピューティング容量がない可能性があります。

T2 または T3 インスタンスの場合は、CloudWatch メトリクステーブルの CPU クレジットメトリクスを調べて、CPU クレジットがゼロかほぼゼロに近いかを決めます。CPU クレジットがゼロの場合、CPUUtilization メトリクスはインスタンスのベースラインパフォーマンスが飽和停滞状態であることを示します。インスタンスタイプに応じて、ベースラインパフォーマンスは 20%、40% などになります。

CPU 使用率を 100% または 100% に近い値で示す CloudWatch メトリクス、または T2 や T3 インスタンスの飽和状態で示すメトリクスは、インスタンスリソースの過剰使用率が原因でステータスチェックが失敗したことを示します。この問題をトラブルシューティングする方法については、「リソースの使用率が高すぎたため、EC2 Linux インスタンスでインスタンスのステータスチェックが失敗しました」を参照してください。どのようにトラブルシューティングすればよいですか?

ブロックデバイスエラー、ソフトウェアのバグ、またはカーネルパニックにより、CPU 使用率が異常に急上昇する場合があります。CPUUtilization メトリクスが 100% で、システムログにブロックデバイス、メモリの問題、またはその他の異常なシステムエラーに関連するエラーが含まれている場合は、インスタンスを再起動または停止して起動します。

メモリ不足

メモリ負荷が高いと、インスタンスのステータスチェックが失敗する場合があります。次の例では、オペレーティングシステムがメモリ不足で、最もメモリを消費するプロセスを停止しています。

[115879.769795] Out of memory: kill process 20273 (httpd) score 1285879 or a child
[115879.769795] Killed process 1917 (php-cgi) vsz:467184kB, anon-rss:101196kB, file-rss:204kB

EC2 メモリとディスクのメトリクスは、デフォルトで CloudWatch に送信されません。ただし、CloudWatch エージェントを使用してモニタリングのために CloudWatch に追加のメトリクスを送信することができます。

メモリ不足の問題をトラブルシューティングして解決するには、インスタンスをより大きなインスタンスタイプにアップグレードすることを検討してください。または、スワップストレージをインスタンスに追加して、メモリの負荷を軽減します。詳細については、以下の記事を参照してください。

ディスクがいっぱいになったエラー

システムログにディスクがいっぱいになったエラーが含まれている場合、ルートデバイスがいっぱいであるため、インスタンスが緊急モードに入っている場合があります。

$: service apache2 restart
Error: No space left on device

$: /etc/init.d/mysql restart
[....] Restarting mysql (via systemctl): mysql.serviceError: No space left on device
        
        
root@example:~# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       7.7G  7.7G     0 100% /

カーネルパニック

カーネルパニックエラーは、動作中に内部の致命的なエラーをカーネルが検出したときに発生します。オペレーティングシステムの起動中にエラーが発生した場合、カーネルは適切にロードできない場合があります。これにより、オペレーティングシステムの起動に失敗する場合があります。次に、カーネルパニックエラーメッセージの例を示します。

Linux version
2.6.16-xenU (builder@xenbat.amazonsa) (gcc version 4.0.1 20050727 (Red Hat4.0.1-5)) #1 SMP Mon May 28 03:41:49 SAST 2007
Kernel command
line:  root=/dev/sda1 ro 4
Registering block device major 8
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,1)