當您嘗試從叢集環境中執行的虛擬機取得完整記憶體傾印檔案時,損毀的記憶體轉儲檔案
本文提供當您嘗試從虛擬機取得完整記憶體傾印檔案時,產生損毀記憶體傾印檔案的問題的解決方案。
原始 KB 編號: 2913486
徵兆
您有在 Windows Server 2012 或 Windows Server 2008 R2 的叢集環境中執行的虛擬機。 當您嘗試從虛擬機取得完整記憶體傾印檔案時,會產生損毀的記憶體轉儲檔案。 當記憶體傾印檔案載入時,您可能會收到下列訊息:
此傾印檔案部分損毀。
KdDebuggerDataBlock 不存在或無法讀取。
GetContextState 失敗,0xD0000147
無法取得程式計數器
GetContextState 失敗,0xD0000147
無法取得目前的計算機內容 NTSTATUS 0xC0000147
此外,您可能會注意到寫入完整記憶體傾印檔案未完成,而且虛擬機會在叢集中的另一個節點上重新啟動。
原因
發生此問題的原因是 已針對虛擬機選取 [啟用虛擬機 的活動訊號監視] 選項。 此選項會在一分鐘后重設叢集虛擬機(預設值),而叢集虛擬機需要超過一分鐘的時間才能完成寫入記憶體轉儲。
注意
虛擬機與 Virtual Machine Manager 之間的活動訊號每隔幾秒鐘就會發生一次。 最多可能需要一分鐘才能偵測虛擬機已關閉,因為虛擬機資源會在其 isAlive 進入點函式中檢查 Virtual Machine Manager 的活動訊號狀態。 根據預設,isAlive 會每分鐘發生一次。 不過,活動訊號可能會在一分鐘間隔前停止 30 秒。 在此情況下,叢集可以在相同的伺服器上重新啟動虛擬機,或將其故障轉移至另一個節點。
解決方法
若要解決此問題,請停用 [啟用虛擬機 的活動訊號監視] 選項。
選項 1:從 GUI 變更設定
- 開啟 [容錯移轉叢集管理員]。
- 按兩下 [ 角色],然後尋找虛擬機資源。
- 在 [資源] 索引標籤上,以滑鼠右鍵按兩下虛擬機。
- 按兩下 [ 屬性],然後按兩下 [ 設定] 索引標籤。
- 在 [活動訊號設定] 中,按下即可清除 [啟用應用程式健康情況監視的自動復原] 複選框。
- 按兩下即可清除 [啟用虛擬機 的活動訊號監視] 複選框,然後按兩下 [ 確定]。
選項 2:使用 Windows PowerShell 變更設定
啟動 Windows PowerShell。
檢查虛擬機名稱。 若要這樣做,請輸入下列 Windows PowerShell 命令:
PS C:\> Get-ClusterResource
檢查是否已 選取 [啟用虛擬機 的活動訊號監視] 和 [啟用應用程式健康情況監視 的自動復原] 選項。 若要這樣做,請輸入下列 Windows PowerShell 命令:
PS C:\> Get-ClusterResource <VirtualMachineName> | Get-ClusterParameter CheckHeartbeat
當 CheckHeartbeat 值為 1 時,會選取這兩個選項。 若要取消這兩個選項,請將此值變更為 0。 若要這樣做,請輸入下列 Windows PowerShell 命令:
PS C:\> Get-ClusterResource <VirtualMachineName> | Set-ClusterParameter CheckHeartbeat 0
如果您想要只取消 [ 啟用應用程式健康情況監視 的自動復原] 選項,您應該執行下列 Windows PowerShell 命令:
PS C:\> (Get-ClusterResource <Object>).EmbeddedFailureAction = 1
其他相關資訊
小型和核心記憶體傾印檔案已成功寫入。 這是因為寫入這些檔案所需的時間不會超過一分鐘的臨界值。