診断割り込みを送信して到達不能の Amazon EC2 インスタンスをデバッグする
警告
診断割り込みは、上級ユーザーが使用することを目的としています。不適切な使用は、インスタンスに悪影響を与える可能性があります。診断割り込みをインスタンスに送信すると、インスタンスがクラッシュして再起動し、データが失われる可能性があります。
到達できない、または応答しないインスタンスに診断割り込みを送信して、Linux インスタンスのカーネルパニック、または Windows インスタンスの停止エラー (通称ブルースクリーンエラー) を手動でトリガーできます。
Linux インスタンス
Linux オペレーティングシステムは一般的に、カーネルパニックが発生するとクラッシュして再起動されます。ただし、オペレーティングシステムの具体的な動作は設定によって異なります。カーネルパニックは、インスタンスのオペレーティングシステムカーネルでクラッシュダンプファイルの生成などのタスクを実行するためにも使用できます。このクラッシュダンプファイル内の情報を使用すると、根本原因解析を実施してインスタンスのデバッグを行うことができます。クラッシュダンプデータは、インスタンスの代わりにオペレーティングシステムによってローカルで生成されます。
Windows インスタンス
一般的に、Windows オペレーティングシステムは停止エラーが発生するとクラッシュして再起動されますが、具体的な動作は設定によって異なります。停止エラーが発生すると、オペレーティングシステムからカーネルメモリダンプなどのデバッグ情報がファイルに出力されることもあります。この情報を使用すると、根本原因解析を実施してインスタンスのデバッグを行うことができます。メモリダンプデータは、インスタンスの代わりにオペレーティングシステムによってローカルで生成されます。
インスタンスに診断割り込みを送信する前に、OS のドキュメントを参照し、必要な設定変更を行うことをお勧めします。
サポートされるインスタンスタイプ
診断割り込みは、Nitro ベースのすべてのインスタンスタイプでサポートされます。ただし、AWS Graviton プロセッサで動作するものを除きます。詳細については、「Instances built on the AWS Nitro System」と「AWS Graviton
前提条件
診断割り込みを使用する前に、インスタンスのオペレーティングシステムを設定する必要があります。こうすることで、カーネルパニック (Linux インスタンス) または停止エラー (Windows インスタンス) の発生時に必要なアクションが実行されるようになります。
カーネルパニックの発生時にクラッシュダンプが生成されるように Amazon Linux 2 を設定するには
-
インスタンスに接続します。
-
kexec と kdump をインストールします。
[ec2-user ~]$
sudo yum install kexec-tools -y -
セカンダリカーネル用に適切な量のメモリが予約されるようにカーネルを設定します。予約するメモリの量は、インスタンスで使用可能な合計メモリによって異なります。適切なテキストエディタを使用して
/etc/default/grub
ファイルを開き、GRUB_CMDLINE_LINUX_DEFAULT
から始まる行を見つけて、crashkernel
という形式でcrashkernel=
パラメータを追加します。たとえば、memory_to_reserve
160MB
を予約するには、grub
ファイルを次のように変更します。GRUB_CMDLINE_LINUX_DEFAULT="crashkernel=160M console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0" GRUB_TIMEOUT=0 GRUB_DISABLE_RECOVERY="true"
-
変更内容を保存し、
grub
ファイルを閉じます。 -
GRUB2 設定ファイルを再構築します。
[ec2-user ~]$
sudo grub2-mkconfig -o /boot/grub2/grub.cfg -
Intel および AMD プロセッサをベースとしたインスタンスの場合、
send-diagnostic-interrupt
コマンドを実行すると 不明なマスク不可割り込み (NMI、unknown non-maskable interrupt) がインスタンスに送信されます。不明な NMI を受信した際にはクラッシュするようにカーネルを設定しておく必要があります。適切なテキストエディタを使用して/etc/sysctl.conf
ファイルを開き、以下を追加します。kernel.unknown_nmi_panic=1
-
インスタンスを再起動して再接続します。
-
正しい
crashkernel
パラメータを使用してカーネルが起動されていることを確認します。$
grep crashkernel /proc/cmdline次の出力例は、適切な設定を示しています。
BOOT_IMAGE=/boot/vmlinuz-4.14.128-112.105.amzn2.x86_64 root=UUID=a1e1011e-e38f-408e-878b-fed395b47ad6 ro crashkernel=160M console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0
-
kdump サービスが実行中であることを確認します。
[ec2-user ~]$
systemctl status kdump.service次の出力例は、kdump サービスが実行中である場合の結果を示しています。
kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled; vendor preset: enabled) Active: active (exited) since Fri 2019-05-24 23:29:13 UTC; 22s ago Process: 2503 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS) Main PID: 2503 (code=exited, status=0/SUCCESS)
注記
デフォルトでは、クラッシュダンプファイルは /var/crash/
に保存されます。保存先を変更するには、適切なテキストエディタを使用して /etc/kdump.conf
ファイルを変更します。
カーネルパニックの発生時にクラッシュダンプが生成されるように Amazon Linux を設定するには
-
インスタンスに接続します。
-
kexec と kdump をインストールします。
[ec2-user ~]$
sudo yum install kexec-tools -y -
セカンダリカーネル用に適切な量のメモリが予約されるようにカーネルを設定します。予約するメモリの量は、インスタンスで使用可能な合計メモリによって異なります。
$
sudo grubby --args="crashkernel=memory_to_reserve
" --update-kernel=ALLたとえば、クラッシュカーネル用に
160MB
を予約するには、次のコマンドを使用します。$
sudo grubby --args="crashkernel=160M" --update-kernel=ALL -
Intel および AMD プロセッサをベースとしたインスタンスの場合、
send-diagnostic-interrupt
コマンドを実行すると 不明なマスク不可割り込み (NMI、unknown non-maskable interrupt) がインスタンスに送信されます。不明な NMI を受信した際にはクラッシュするようにカーネルを設定しておく必要があります。適切なテキストエディタを使用して/etc/sysctl.conf
ファイルを開き、以下を追加します。kernel.unknown_nmi_panic=1
-
インスタンスを再起動して再接続します。
-
正しい
crashkernel
パラメータを使用してカーネルが起動されていることを確認します。$
grep crashkernel /proc/cmdline次の出力例は、適切な設定を示しています。
root=LABEL=/ console=tty1 console=ttyS0 selinux=0 nvme_core.io_timeout=4294967295 LANG=en_US.UTF-8 KEYTABLE=us crashkernel=160M
-
kdump サービスが実行中であることを確認します。
[ec2-user ~]$
sudo service kdump statusサービスが実行中であれば、コマンドから
Kdump is operational
応答が返されます。
注記
デフォルトでは、クラッシュダンプファイルは /var/crash/
に保存されます。保存先を変更するには、適切なテキストエディタを使用して /etc/kdump.conf
ファイルを変更します。
SUSE Linux Enterprise、Ubuntu、または Red Hat Enterprise Linux を設定するには
Intel および AMD プロセッサをベースとしたインスタンスの場合、send-diagnostic-interrupt
コマンドを実行すると 不明なマスク不可割り込み (NMI、unknown non-maskable interrupt) がインスタンスに送信されます。オペレーティングシステムの設定ファイルを調整して、不明な NMI を受信したときにカーネルがクラッシュするように設定する必要があります。カーネルをクラッシュするように設定する方法については、オペレーティングシステムのドキュメントを参照してください。
停止エラーの発生時に Windows によってメモリダンプが生成されるように設定するには
-
インスタンスに接続します。
-
[コントロールパネル] を開き、[システム]、[システムの詳細設定] の順に選択します。
-
[システムのプロパティ] ダイアログボックスの [詳細設定] タブを選択します。
-
[起動と回復] セクションで、[設定...] を選択します。
-
[システムエラー] セクションで必要に応じて設定を行い、[OK] を選択します。
Windows 停止エラーの設定の詳細については、「Overview of memory dump file options for Windows
診断割り込みの送信
必要な設定変更を完了したら、AWS CLI または Amazon EC2 API を使用して、診断割り込みをインスタンスに送信できます。