本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
傳送診斷中斷以偵錯無法連線的 Amazon EC2 執行個體
警告
診斷中斷專供進階使用者使用。不正確的使用可能會對執行個體造成負面影響。將診斷中斷傳送至執行個體可能會觸發執行個體當機並重新開機,這會導致資料遺失。
您可以傳送診斷中斷給無法連線或無回應的執行個體,以手動觸發 Linux 執行個體的核心錯誤,或針對 Windows 執行個體觸發停止錯誤 (通常稱為藍色畫面錯誤)。
Linux 執行個體
發生核心錯誤時,Linux 作業系統通常會當機並重新開機。作業系統的具體行為取決於其組態。核心錯誤也可用來促使執行個體的作業系統核心執行任務,例如產生損毀傾印檔案。然後,您可以利用損毀傾印檔案中的資訊來分析根本原因,對執行個體進行除錯。作業系統會代表執行個體本身在本機產生損毀傾印資料。
Windows 執行個體
一般而言,Windows 作業系統在停止錯誤發生時會當機並重新開機,但具體行為取決於其組態。停止錯誤也會導致作業系統將除錯資訊 (例如核心記憶體傾印) 寫入檔案。然後,您可以利用此資訊來分析根本原因,以進行執行個體的除錯。作業系統會代表執行個體本身在本機產生記憶體傾印資料。
將診斷中斷傳送至執行個體之前,建議您先參閱作業系統的說明文件,然後進行必要的組態變更。
支援的執行個體類型
所有 Nitro 型執行個體類型都支援診斷中斷,但由 AWS Graviton 處理器驅動的執行個體類型除外。如需詳細資訊,請參閱以 AWS Nitro 系統建置的執行個體和AWS 重力
必要條件
使用診斷中斷之前,您必須設定執行個體的作業系統。這可確保它在發生核心錯誤 (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) 給執行個體。您必須配置內核在收到未知的內核時崩潰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) 給執行個體。您必須配置內核在收到未知的內核時崩潰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 企業版、Ubuntu 或紅帽企業版 Linux
在以 Intel 和AMD處理器為基礎的執行個體上,此send-diagnostic-interrupt
命令會傳送未知的不可遮罩岔斷 (NMI) 給執行個體。您必須透NMI過調整作業系統的組態檔案,將核心設定為在收到未知資訊時損毀。如需如何設定核心損毀的詳細資訊,請參閱您作業系統的說明文件:
設定 Windows 在停止錯誤發生時產生記憶體傾印
-
連線到您的執行個體。
-
開啟控制台,選擇系統、進階系統設定。
-
在系統內容對話方塊中,選擇進階索引標籤。
-
在啟動及修復區段中,選擇設定...。
-
在系統失敗區段中,視需要進行設定,然後選擇確定。
如需有關設定 Windows 停止錯誤的詳細資訊,請參閱 Windows 記憶體傾印檔案選項的概觀
傳送診斷中斷
完成必要的組態變更後,您可以使用 AWS CLI 或 Amazon 將診斷中斷傳送到執行個體EC2API。