診断割り込みの送信 (上級ユーザーのみ) - Amazon Elastic Compute Cloud

診断割り込みの送信 (上級ユーザーのみ)

警告

診断割り込みは、上級ユーザーが使用することを目的としています。不適切な使用は、インスタンスに悪影響を与える可能性があります。診断割り込みをインスタンスに送信すると、インスタンスがクラッシュして再起動し、データが失われる可能性があります。

到達できないまたは応答しない Linux インスタンスに診断割り込みを送信して、カーネルパニックを手動でトリガーできます。

Linux オペレーティングシステムは一般的に、カーネルパニックが発生するとクラッシュして再起動されます。ただし、オペレーティングシステムの具体的な動作は設定によって異なります。カーネルパニックは、インスタンスのオペレーティングシステムカーネルでクラッシュダンプファイルの生成などのタスクを実行するためにも使用できます。このクラッシュダンプファイル内の情報を使用すると、根本原因解析を実施してインスタンスのデバッグを行うことができます。

クラッシュダンプデータは、インスタンスの代わりにオペレーティングシステムによってローカルで生成されます。

インスタンスに診断割り込みを送信する前に、オペレーティングシステムのドキュメントを参照し、必要な設定を変更することをお勧めします。

サポートされるインスタンスタイプ

診断割り込みは、Nitロベースのインスタンスタイプのすべて(A1 を除く)でサポートされます。詳細については、「Nitro System 上に構築されたインスタンス」を参照してください。

Prerequisites

診断割り込みを使用する前に、インスタンスのオペレーティングシステムを設定する必要があります。これにより、カーネルパニックの発生時に必要なアクションをオペレーティングシステムで実行できます。

カーネルパニックの発生時にクラッシュダンプが生成されるように Amazon Linux 2 を設定するには

  1. インスタンスに接続します。

  2. kexeckdump をインストールします。

    [ec2-user ~]$ sudo yum install kexec-tools -y
  3. セカンダリカーネル用に適切な量のメモリが予約されるようにカーネルを設定します。予約するメモリの量は、インスタンスで使用可能な合計メモリによって異なります。適切なテキストエディタを使用して /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"
  4. 変更内容を保存し、grub ファイルを閉じます。

  5. GRUB2 設定ファイルを再構築します。

    [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  6. Intel および AMD プロセッサをベースとしたインスタンスの場合、send-diagnostic-interrupt コマンドを実行すると 不明なマスク不可割り込み (NMI、unknown non-maskable interrupt) がインスタンスに送信されます。不明な NMI を受信した際にはクラッシュするようにカーネルを設定しておく必要があります。適切なテキストエディタを使用して /etc/sysctl.conf ファイルを開き、以下を追加します。

    kernel.unknown_nmi_panic=1
  7. インスタンスを再起動して再接続します。

  8. 正しい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
  9. 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 を設定するには

  1. インスタンスに接続します。

  2. kexeckdump をインストールします。

    [ec2-user ~]$ sudo yum install kexec-tools -y
  3. セカンダリカーネル用に適切な量のメモリが予約されるようにカーネルを設定します。予約するメモリの量は、インスタンスで使用可能な合計メモリによって異なります。

    $ sudo grubby --args="crashkernel=memory_to_reserve" --update-kernel=ALL

    たとえば、クラッシュカーネル用に 160MB を予約するには、次のコマンドを使用します。

    $ sudo grubby --args="crashkernel=160M" --update-kernel=ALL
  4. Intel および AMD プロセッサをベースとしたインスタンスの場合、send-diagnostic-interrupt コマンドを実行すると 不明なマスク不可割り込み (NMI、unknown non-maskable interrupt) がインスタンスに送信されます。不明な NMI を受信した際にはクラッシュするようにカーネルを設定しておく必要があります。適切なテキストエディタを使用して /etc/sysctl.conf ファイルを開き、以下を追加します。

    kernel.unknown_nmi_panic=1
  5. インスタンスを再起動して再接続します。

  6. 正しい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
  7. 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 を受信した際にはクラッシュするようにカーネルを設定しておく必要があります。設定ファイルに以下を追加します。

kernel.unknown_nmi_panic=1

診断割り込みの送信

必要な設定変更を完了したら、AWS CLI または Amazon EC2 API を使用して、診断割り込みをインスタンスに送信できます。

診断割り込みをインスタンス (AWS CLI) に送信するには

send-diagnostic-interrupt コマンドを使用し、インスタンス ID を指定します。

aws ec2 send-diagnostic-interrupt --instance-id i-1234567890abcdef0