Windows 凍結的進階疑難解答

本文說明如何針對 Windows 計算機和伺服器上的凍結問題進行疑難解答。 它也提供收集數據的方法,以協助系統管理員或軟體開發人員診斷、識別及修正這些問題。

注意事項

本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。

適用於: Windows 10

識別問題

  • 哪部計算機正在凍結? 例如,受影響的計算機是實體伺服器或虛擬伺服器。
  • 當作業凍結時,發生什麼作業? 例如,當您關閉時,就會發生此問題。
  • 錯誤的發生頻率為何? 例如,此問題會在每天晚上 7 點發生。
  • 此凍結發生多少部計算機? 例如,所有計算機或只有一部計算機。

針對凍結問題進行疑難解答

若要針對凍結問題進行疑難解答,請檢查計算機目前的狀態,並遵循下列其中一種方法。

針對仍在處於凍結狀態執行的計算機

如果實體計算機或虛擬機仍然凍結,請使用下列一或多個方法進行疑難解答:

  • 嘗試透過遠端桌面連線存取電腦。
  • 使用網域帳戶或本機系統管理員帳戶,以硬體製造商的遠端訪問解決方案登入計算機。 例如,Dell Remote Access Card (DRAC) 、HP Integrated Lights-Out (iLo) 或 IBM Remote supervisor adapter (RSA) 。
  • 測試對計算機的 Ping。 尋找已卸除的封包和高網路等待時間。
  • 存取系統管理共用,例如 \\ServerName\c$
  • 按 Ctrl+Alt+Delete 並檢查回應。
  • 嘗試使用 Windows 遠端管理工具。 例如,計算機管理、伺服器管理員 和 Wmimgmt.msc。

針對不再凍結的計算機

如果實體計算機或虛擬機凍結,但現在處於良好狀態執行,請使用下列一或多個方法進行疑難解答。

針對實體計算機

  • 從發生問題的計算機檢閱系統和應用程式記錄。 檢查事件記錄檔中是否有相關的事件識別碼:

    • 應用程式事件記錄檔:應用程式錯誤,這會建議損毀或相關的系統程式
    • 系統事件記錄檔、重要系統服務的服務控制管理員錯誤事件標識碼
    • 來源 Srv/Server 的錯誤事件識別碼 2019/2020
  • 執行來產生系統診斷報告 perfmon /report

針對虛擬機

  • 檢閱發生問題的電腦上的系統和應用程式記錄。
  • 執行來產生系統診斷報告 perfmon /report
  • 在虛擬管理監視工具中檢查系統的歷程記錄。

收集凍結問題的數據

若要收集伺服器凍結的數據,請檢查下表,並使用一或多個建議的方法。

計算機類型和狀態 數據收集方法
處於凍結狀態執行的實體計算機 使用記憶體轉儲檔案來收集數據。 或使用方法 2、3 或 4。 本節稍後會列出這些方法。
不再凍結的實體計算機 使用方法 1、2、3 或 4。 本節稍後會列出這些方法。 並 使用集區監視器來收集數據
處於凍結狀態執行的虛擬機 Hyper-V 或 VMware: 使用記憶體轉儲檔案來收集處於凍結狀態之虛擬機的數據
XenServer:使用方法 1、2、3 或 4。 本節稍後會列出這些方法。
不再凍結的虛擬機 使用方法 1、2、3 或 4。 本節稍後會列出這些方法。

方法 1:記憶體轉儲

重要事項

請仔細依照本節中的步驟執行。 如果您不當地修改登錄,可能會發生嚴重的問題。 在您進行修改之前,請先備份登錄,做為還原之用,以免發生問題。

當電腦意外停止時,完整的記憶體轉儲檔案會記錄系統記憶體的所有內容。 完整的記憶體轉儲檔案可能包含收集記憶體轉儲檔案時執行之進程中的數據。

如果計算機已不再凍結,且目前處於良好狀態,請使用下列步驟來啟用記憶體轉儲,以便在凍結問題再次發生時收集記憶體轉儲。 如果虛擬機仍在凍結狀態中執行,請使用下列步驟來啟用和收集記憶體轉儲。

注意事項

如果您有在計算機上啟用的重新啟動功能,例如 Compaq 計算機中的自動系統重新啟動 (ASR) 功能,請加以停用。 此設定通常位於 BIOS 中。 啟用這項功能后,如果 BIOS 未偵測到來自作業系統的活動訊號,則會重新啟動電腦。 重新啟動可能會中斷傾印程式。

  1. 請確定計算機已設定為取得完整的記憶體轉儲檔案。

    1. 移至 [ 執行 ],然後輸入 Sysdm.cpl,然後按 Enter 鍵。
    2. [系統屬性] 的 [進階] 索引標籤上,選取 [效能>設定][進階>]。 選 取 [變更 ] 以檢查或變更虛擬記憶體。
    3. 返回 啟始和復原中的 [系統屬性>] [進>階設定]。
    4. 在 [ 寫入偵錯資訊 ] 區段中,選取 [ 完成記憶體轉儲]
    5. 選取 [覆寫任何現有的檔案]
    6. 請確定系統磁碟驅動器上有 (pagefile.sys) 的分頁檔案,且其在已安裝 RAM (初始和大小上限) 至少為 100 MB。
    7. 請確定系統磁碟驅動器上的可用空間比實體 RAM 還多。
  2. 若要允許系統使用鍵盤產生傾印檔案,請啟 CrashOnCtrlScroll 用登錄值。

    1. 開啟登錄 編輯器,然後找出下列登錄機碼:

      • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
      • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters
    2. 在兩個登錄機碼中建立下列 CrashOnCtrlScroll 登錄專案:

      • 數值名稱: CrashOnCtrlScroll
      • 數據類型: REG_DWORD
      • 值: 1
    3. 關閉登錄 編輯器 並重新啟動電腦。

  3. 在執行舊版 Windows 的某些實體計算機上,您可能會從DRAC、iLo 或 RSA 等 Web 介面功能產生不可對應的中斷 (NMI) 。 不過,根據預設,此設定會停止系統,而不會建立記憶體轉儲。

    注意事項

    針對目前支援的 Windows 版本, NMICrashDump 不再需要登錄機碼。 NMI 會在 記憶體轉儲數據收集之後造成停止錯誤

  4. 當計算機出現問題時,按住右 Ctrl 鍵,然後按兩次捲動鎖定鍵以產生記憶體傾印檔案。

    注意事項

    根據預設,傾印檔案位於下列路徑: %SystemRoot%\MEMORY。DMP

方法 2:數據清理檢查

使用傾印檢查公用程式 (Dumpchk.exe) 讀取記憶體轉儲檔案。 它也可以確認檔案已正確建立,且未損毀或無效。

瞭解如何使用 Dumpchk.exe 來檢查您的傾印檔案:

方法 3:效能監視器

您可以使用 Windows 效能監視器 來檢查您執行的程式如何即時影響電腦的效能,以及收集記錄數據以供稍後分析。 若要在本機和遠端系統上建立性能計數器和事件追蹤記錄檔集合,請以系統管理員身分在命令提示字元中執行下列命令:

Logman create counter LOGNAME_Long -u DOMAIN\USERNAME * -f bincirc -v mmddhhmm -max 500 -c "\\COMPUTERNAME\LogicalDisk(*)\*" "\\COMPUTERNAME\Memory\*" "\\COMPUTERNAME\Network Interface(*)\*" "\\COMPUTERNAME\Paging File(*)\*" "\\COMPUTERNAME\PhysicalDisk(*)\*" "\\COMPUTERNAME\Process(*)\*" "\\COMPUTERNAME\Redirector\*" "\\COMPUTERNAME\Server\*" "\\COMPUTERNAME\System\*" "\\COMPUTERNAME\Terminal Services\*" "\\COMPUTERNAME\Processor(*)\*" "\\COMPUTERNAME\Cache\*" -si 00:05:00
Logman create counter LOGNAME_Short -u DOMAIN\USERNAME * -f bincirc -v mmddhhmm -max 500 -c "\\COMPUTERNAME\LogicalDisk(*)\*" "\\COMPUTERNAME\Memory\*" "\\COMPUTERNAME\Network Interface(*)\*" "\\COMPUTERNAME\Paging File(*)\*" "\\COMPUTERNAME\PhysicalDisk(*)\*" "\\COMPUTERNAME\Process(*)\*" "\\COMPUTERNAME\Redirector\*" "\\COMPUTERNAME\Server\*" "\\COMPUTERNAME\System\*" "\\COMPUTERNAME\Terminal Services\*" "\\COMPUTERNAME\Processor(*)\*" "\\COMPUTERNAME\Cache\*" -si 00:00:10

然後,您可以執行下列命令來啟動或停止記錄:

logman start LOGNAME_Long / LOGNAME_Short
logman stop LOGNAME_Long / LOGNAME_Short

效能監視器 記錄位於路徑中:C:\PERFLOGS

收集數據的其他方法

使用記憶體轉儲來收集處於凍結狀態執行之實體計算機的數據

警告

請仔細依照本節中的步驟執行。 如果您不當地修改登錄,可能會發生嚴重的問題。 在您進行修改之前,請先備份登錄,做為還原之用,以免發生問題。

如果實體計算機仍在凍結狀態下執行,請遵循下列步驟來啟用和收集記憶體轉儲:

  1. 請確定計算機已設定為取得完整的記憶體轉儲檔案,而且您可以透過網路存取它。

    注意事項

    如果無法透過網路存取受影響的計算機,請嘗試透過 NMI 產生記憶體轉儲檔案。 如果不符合下列某些設定,動作的結果可能不會收集記憶體轉儲檔案。

    1. 嘗試以任何方式存取電腦的桌面。

      注意事項

      如果無法存取 OS,請嘗試從遠端存取電腦上的登入 編輯器。 然後,您可以檢查電腦目前設定的記憶體轉儲檔案和頁面檔類型。

    2. 從最好位於相同網路和子網的遠端計算機,移至 [登錄 編輯器>連線網络登錄]。 然後,連線到受影響的計算機,並確認下列設定:

      • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\CrashDumpEnabled

        請確定 CrashDumpEnabled 登錄專案為 1

      • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl\NMICrashDump

        在某些實體伺服器上,如果 NMICrashDump 登錄專案存在,且其值為 1,您可能會利用遠端管理提供者的 NMI,例如 DRAC、iLo 和 RSA。

      • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PagingFiles and ExistingPageFiles

        如果登錄專案的 Pagefile 值是系統管理的,則大小不會反映在登錄中。 例如,?:\pagefile.sys)

        如果自訂頁面檔案,大小會反映在登入中,例如 ?:\pagefile.sys 1024 1124。 在此範例中,1024 是初始大小,而 1124 是大小上限。

        注意事項

        如果大小未反映在登錄中,請嘗試存取頁面檔案所在的系統管理共用。 例如, \\ServerName\C$

    3. 請確定計算機的系統磁碟驅動器上有一個分頁檔案 (pagefile.sys) ,且在已安裝的 RAM 上至少有 100 MB。

    4. 請確定電腦硬碟上的可用空間比實體 RAM 還多。

  2. 在計算機上啟用 CrashOnCtrlScroll 登錄值,以允許系統使用鍵盤產生傾印檔案。

    1. 從最好位於相同網路和子網的遠端計算機,移至 [登錄 編輯器>連線網络登錄]。 線上到受影響的電腦,並找出下列登錄機碼:

      • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
      • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters
    2. 在兩個登錄機碼中建立下列 CrashOnCtrlScroll 登錄專案:

      數值名稱: CrashOnCtrlScroll 數據類型: REG_DWORD 值: 1

    3. 關閉登錄 編輯器 並重新啟動電腦。

  3. 當計算機出現問題時,按住右 Ctrl 鍵,然後按兩次滾動鎖定鍵以產生記憶體轉儲。

    注意事項

    根據預設,傾印檔案位於路徑: %SystemRoot%\MEMORY。DMP

使用集區監視器收集不再凍結之實體計算機的數據

集區監視器會顯示依集區類型配置的配置和未處理位元組數目,以及傳遞至ExAllocatePoolWithTag呼叫的標記。

如需詳細資訊,請 參閱使用PoolMon尋找 Kernel-Mode 記憶體流失PoolMon範例

使用記憶體轉儲來收集處於凍結狀態執行之虛擬機的數據

針對執行虛擬機器的應用程式,請使用下列其中一種方法。

Microsoft Hyper-V

您也可以透過 Debug-VM Cmdlet 使用內建 NMI 功能來偵錯和取得記憶體轉儲。

若要對 Hyper-V 上的虛擬機進行偵錯,請在 Windows PowerShell 中執行下列 Cmdlet:

Debug-VM -Name "VM Name" -InjectNonMaskableInterrupt -ComputerName Hostname  

Vmware

您可以使用 VMware 快照集或暫停狀態,並擷取相當於完整記憶體轉儲檔案的記憶體轉儲檔案。 使用 VMware 的[對 核心檢查點工具] (vmss2core) ,將暫停 () .vmss 和快照集 (.vmsn) 狀態檔案轉換為傾印檔案。 然後使用標準 Windows 偵錯工具來分析檔案。

Citrix XenServer

記憶體轉儲程序的發生方式是按右 Ctrl+捲動鎖定+捲動鎖定鍵盤組合。 如需詳細資訊,請參閱如何從 Citrix 在 XenServer 上執行的 Windows 虛擬機觸發記憶體轉儲 的方法 1。

Windows Server 中系統磁碟驅動器的空間限制

在 Windows Server 上,您可能沒有足夠的可用磁碟空間,無法在系統磁碟區上產生完整的記憶體轉儲檔案。

如果系統磁碟驅動器沒有足夠的空間,則有第二個選項。 您可以使用 DedicatedDumpFile 登錄專案。 如需詳細資訊, 請參閱設定記憶體轉儲的目的地路徑

如需詳細資訊,請 參閱如何使用 DedicatedDumpFile 登錄值來克服系統磁碟驅動器上的空間限制