傳送診斷中斷 (僅適用於進階使用者) - Amazon Elastic Compute Cloud

傳送診斷中斷 (僅適用於進階使用者)

警告

診斷中斷專供進階使用者使用。不正確的使用可能會對執行個體造成負面影響。將診斷中斷傳送至執行個體可能會觸發執行個體當機並重新開機,這會導致資料遺失。

您可以將診斷中斷傳送至無法連線或沒有回應的 Linux 執行個體,以立即觸發核心錯誤

發生核心錯誤時,Linux 作業系統通常會當機並重新開機。作業系統的具體行為取決於其組態。核心錯誤也可用來促使執行個體的作業系統核心執行任務,例如產生損毀傾印檔案。然後,您可以利用損毀傾印檔案中的資訊來分析根本原因,對執行個體進行除錯。

作業系統會代表執行個體本身在本機產生損毀傾印資料。

將診斷中斷傳送至執行個體之前,建議您先參閱作業系統的說明文件,然後進行必要的組態變更。

支援的執行個體類型

所有 Nitro 型執行個體類型都支援診斷中斷,但由 AWS Graviton 處理器提供技術支援的執行個體類型除外。如需詳細資訊,請參閱 建置在 Nitro 系統上的執行個體AWS Graviton

先決條件

使用診斷中斷之前,您必須設定執行個體的作業系統。如此可確保在核心錯誤發生時執行您需要的動作。

設定 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 命令會將 unknown non-maskable interrupt (NMI) 傳送至執行個體。您必須將核心設定為收到不明 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 命令會將 unknown non-maskable interrupt (NMI) 傳送至執行個體。您必須將核心設定為收到不明 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 命令會將 unknown non-maskable interrupt (NMI) 傳送至執行個體。您必須將核心設定為收到不明 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