使用核心傾印分析虛擬機器 (VM) 執行個體沒有回應的原因。
如要在 Compute Engine 上收集核心傾印,您必須將 VM 設定為接收不可遮蔽中斷 (NMI) 信號,然後執行 SendDiagnosticInterrupt
指令,在作業系統中觸發核心恐慌或藍色畫面。核心恐慌或藍色畫面會啟動訪客作業系統的核心傾印收集作業。這些核心傾印檔可用於偵錯,特別是在難以重現的情況下,例如核心凍結。
事前準備
- 傳送 NMI 信號會計入預設的「查詢」API 配額。詳情請參閱「API 使用頻率限制」一文。
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,可以選取下列任一選項,向 Compute Engine 進行驗證:
Select the tab for how you plan to use the samples on this page:
gcloud
-
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
- Set a default region and zone.
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。
必要的角色
如要確保使用者或服務帳戶具備將 NMI 信號傳送至 VM 的必要權限,請要求管理員授予使用者或服務帳戶專案的「Compute Instance 管理員 (v1)」 (
roles/compute.instanceAdmin.v1
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。這個預先定義的角色具備
compute.instances.sendDiagnosticInterrupt
權限,可將 NMI 信號傳送至 VM。管理員或許還可透過自訂角色或其他預先定義的角色,將這項權限授予使用者或服務帳戶。
總覽
如要使用核心傾印檔案偵錯沒有回應的 VM 或安全問題,請完成下列步驟:
限制
如果 VM 已啟用安全啟動功能,您必須先停用這項功能,才能傳送 NMI 中斷信號。如需相關操作說明,請參閱「在 VM 執行個體上修改受防護的 VM 選項」。
設定 VM
VM 收到 NMI 中斷訊號時的反應,取決於 VM 的作業系統設定。
每個作業系統都會將核心傾印記錄寫入不同位置。舉例來說,在 Ubuntu 作業系統中,系統預設會將當機傾印檔案儲存至
/var/crash/
。如要設定客體 OS 在收到 NMI 信號時產生當機傾印,請參閱支援作業系統的說明文件。
作業系統 操作說明連結 其他注意事項 Ubuntu Ubuntu:核心當機傾印 如果是 Linux VM,您必須設定核心,讓核心在收到 NMI 中斷訊號時當機。
如要設定核心當機,請在設定檔中新增下列內容:
kernel.unknown_nmi_panic=1
SUSE Linux Enterprise Server (SLES) 設定 crashkernel 記憶體,以分析核心傾印 Red Hat Enterprise Linux (RHEL) 請提供下列兩份文件:
Container-Optimized OS (COS) 在 GCE COS 執行個體上啟用核心當機傾印 只有 COS 93 以上版本支援使用 NMI 信號產生 kdump。 Windows 產生核心或完整當機傾印 除非 Windows 用戶端 VM 是 AD 網域的成員,或符合下列條件,否則不會保留記憶體傾印檔案:
- 登錄檔將
AlwaysKeepMemoryDump
設為1
- 磁碟可用空間超過 25 GB
詳情請參閱「 Windows 7 中的核心傾印儲存空間和清除行為」。
傳送 NMI 來產生核心傾印
設定 VM 後,您可以使用 Google Cloud CLI 或 REST 將 NMI 信號傳送至 VM。
gcloud
如要傳送 NMI 信號,請使用
instances send-diagnostic-interrupt
指令。gcloud compute instances send-diagnostic-interrupt VM_NAME \ --zone=ZONE
更改下列內容:
VM_NAME
:要收集核心傾印的 VM 執行個體 ID 或名稱ZONE
:VM 所在的可用區
輸出結果會與下列內容相似:
<Empty Response>
如需完整的輸出清單,請參閱本文下一節的「NMI 指令回應」。
REST
(選用步驟) 如果沒有可用的 API 金鑰,請建立一個。 如要進一步瞭解如何建立 API 金鑰,請參閱「建立 API 金鑰」。
如要傳送 NMI 信號,請向
sendDiagnosticInterrupt
方法發出POST
要求。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/sendDiagnosticInterrupt?key=API_KEY
舉例來說,您可以使用
curl
指令提出要求,如下所示:curl --request POST 'https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/sendDiagnosticInterrupt?key=API_KEY' \ --header 'Authorization: Bearer $(gcloud auth print-access-token)' \ --header 'Accept: application/json' \ --compressed
更改下列內容:
PROJECT_ID
:用於建立 VM 的專案 IDZONE
:VM 所在的可用區VM_NAME
:要收集核心傾印的 VM 執行個體 ID 或名稱API_KEY
:您的 API 金鑰
輸出結果會與下列內容相似:
<Empty Response>
如需完整的輸出清單,請參閱本文下一節的「NMI 指令回應」。
NMI 指令回應
嘗試傳送 NMI 信號時,系統會傳回下列其中一項回應。
狀態 內文 附註 成功 <Empty Response>
SUCCESS
顯示 NMI 訊號已傳送至作業系統。這項作業無法保證系統會收集核心傾印,也無法保證 VM 會關閉或重新啟動。這些行為取決於作業系統設定。FAIL UNSUPPORTED_OPERATION
當作業系統無法接收 NMI 信號時,就會發生這種情況。發生這種情況的原因有很多,常見情況是 VM 正在即時遷移,或是 VM 未正確設定為接收 NMI 信號。
如要解決這個問題,請嘗試下列做法:- 確認 VM 設定正確無誤。請參閱「設定 VM」。
- 請稍候片刻,然後重試
SendDiagnosticInterrupt
要求。
FAIL Required 'compute.instances.sendDiagnosticInterrupt' permission for [..]
提出要求的使用者權限不足,因此指令失敗。
如要解決這個問題,請為使用者指派包含compute.instances.sendDiagnosticInterrupt
權限的角色。查看核心傾印
在作業系統的設定或預設位置中,查看當機傾印檔案。
舉例來說,在 Ubuntu 作業系統中,當機傾印檔案預設會儲存至
/var/crash/
。除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-10-19 (世界標準時間)。
-