Windows のフリーズに関する高度なトラブルシューティング

この記事では、Windows ベースのコンピューターとサーバーのフリーズの問題をトラブルシューティングする方法について説明します。 また、管理者またはソフトウェア開発者がこれらの問題を診断、特定、修正するのに役立つデータを収集する方法も提供します。

注:

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

適用対象: Windows 10

問題を特定する

  • どのコンピューターがフリーズしていますか? たとえば、影響を受けるコンピューターは物理サーバーまたは仮想サーバーです。
  • フリーズしたときにどのような操作が発生しましたか? たとえば、この問題はシャットダウン時に発生します。
  • エラーはどのくらいの頻度で発生しますか? たとえば、この問題は毎晩午後 7 時に発生します。
  • このフリーズはいくつのコンピューターで発生しますか? たとえば、すべてのコンピューター、または 1 台のコンピューターのみなどです。

フリーズの問題のトラブルシューティング

フリーズの問題のトラブルシューティングを行うには、コンピューターの現在の状態をチェックし、次のいずれかの方法に従います。

まだフリーズ状態で実行されているコンピューターの場合

物理コンピューターまたは仮想マシンがまだフリーズしている場合は、次の 1 つ以上の方法を使用してトラブルシューティングを行います。

  • リモート デスクトップ接続を介してコンピューターにアクセスしてみてください。
  • ドメイン アカウントまたはローカル管理者アカウントを使用して、ハードウェア製造元のリモート アクセス ソリューションを使用してコンピューターにサインインします。 たとえば、Dell リモート アクセス カード (DRAC)、HP Integrated Lights-Out (iLo)、IBM リモート スーパーバイザー アダプター (RSA) などです。
  • コンピューターへの ping をテストします。 破棄されたパケットと高いネットワーク待機時間を探します。
  • \\ServerName\c$ などの管理共有にアクセスします。
  • Ctrl キーを押しながら Alt キーを押しながら Delete キーを押し、応答をチェックします。
  • Windows リモート管理ツールを使用してみてください。 たとえば、Computer Management、サーバー マネージャー、Wmimgmt.msc などです。

フリーズしなくなったコンピューターの場合

物理コンピューターまたは仮想マシンがフリーズしたが、現在は良好な状態で実行されている場合は、次の 1 つ以上の方法を使用してトラブルシューティングを行います。

物理コンピューターの場合

  • 問題が発生しているコンピューターのシステム ログとアプリケーション ログを確認します。 関連するイベント ID のイベント ログを確認します。

    • アプリケーション イベント ログ: クラッシュまたは関連するシステム プロセスを示すアプリケーション エラー
    • システム イベント ログ、重要なシステム サービスの Service Control Manager エラー イベント ID
    • ソース Srv/Server を使用したエラー イベント ID 2019/2020
  • を実行 perfmon /reportしてシステム診断レポートを生成します。

仮想マシンの場合

  • 問題が発生しているコンピューターのシステム ログとアプリケーション ログを確認します。
  • を実行 perfmon /reportしてシステム診断レポートを生成します。
  • 仮想管理監視ツールでシステムの履歴を確認します。

フリーズの問題のデータを収集する

サーバーのフリーズに関するデータを収集するには、次の表をチェックし、推奨される方法の 1 つ以上を使用します。

コンピューターの種類と状態 データ収集メソッド
フリーズ状態で実行されている物理コンピューター メモリ ダンプ ファイルを使用してデータを収集します。 または、方法 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. 2 つのレジストリ キーに次 CrashOnCtrlScroll のレジストリ エントリを作成します。

      • 値の名前: CrashOnCtrlScroll
      • データ型: REG_DWORD
      • 値: 1
    3. レジストリ エディターを閉じて、コンピューターを再起動します。

  3. 以前のバージョンの Windows を実行している一部の物理コンピューターでは、DRAC、iLo、RSA などの Web インターフェイス機能から、作成できない中断 (NMI) が生成される場合があります。 ただし、既定では、この設定はメモリ ダンプを作成せずにシステムを停止します。

    注:

    現在サポートされているバージョンの Windows では、 NMICrashDump レジストリ キーは不要になりました。 NMI では、 メモリ ダンプ データ収集の後に Stop エラーが発生します。

  4. コンピューターで問題が発生したら、右の Ctrl キーを押しながら、スクロール ロック キーを 2 回押してメモリ ダンプ ファイルを生成します。

    注:

    既定では、ダンプ ファイルは %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 の場合は、DRAC、iLo、RSA などのリモート管理プロバイダーから NMI を利用できます。

      • 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. 2 つのレジストリ キーに次 CrashOnCtrlScroll のレジストリ エントリを作成します。

      値名: CrashOnCtrlScroll データ型: REG_DWORD 値: 1

    3. レジストリ エディターを閉じて、コンピューターを再起動します。

  3. コンピューターで問題が発生したら、右の Ctrl キーを押しながら、スクロール ロック キーを 2 回押してメモリ ダンプを生成します。

    注:

    既定では、ダンプ ファイルはパス %SystemRoot%\MEMORY にあります。DMP

プール モニターを使用して、フリーズしなくなった物理コンピューターのデータを収集する

プール モニターには、プールの種類別の割り当て数と未処理バイト数と、ExAllocatePoolWithTag の呼び出しに渡されるタグが表示されます。

詳細については、「 PoolMon を使用した Kernel-Mode メモリ リークの検索 」と「 PoolMon の例」を参照してください。

メモリ ダンプを使用して、フリーズ状態で実行されている仮想マシンのデータを収集する

仮想マシンが実行されているアプリケーションには、次のいずれかの方法を使用します。

Microsoft Hyper-V

また、Debug-VM コマンドレットを使用して組み込みの NMI 機能を使用して、メモリ ダンプをデバッグして取得することもできます。

Hyper-V で仮想マシンをデバッグするには、Windows PowerShellで次のコマンドレットを実行します。

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

Vmware

VMware スナップショットを使用したり、状態を中断したり、完全なメモリ ダンプ ファイルと同等のメモリ ダンプ ファイルを抽出したりすることができます。 VMware の Checkpoint To Core Tool (vmss2core) を使用して、一時停止 (.vmss) 状態ファイルとスナップショット (.vmsn) 状態ファイルの両方をダンプ ファイルに変換します。 次に、標準の Windows デバッグ ツールを使用してファイルを分析します。

Citrix XenServer

メモリ ダンプ プロセスは、右 Ctrl + スクロール ロック + スクロール ロック キーボードの組み合わせを押すことによって発生します。 詳細については、「 Citrix から XenServer で実行されている Windows 仮想マシンからメモリ ダンプをトリガーする方法 」の方法 1 を参照してください。

Windows Server のシステム ドライブに関する領域の制限事項

Windows Server では、システム ボリュームに完全なメモリ ダンプ ファイルを生成するのに十分な空きディスク領域がない可能性があります。

システム ドライブに十分な領域がない場合は、2 つ目のオプションがあります。 DedicatedDumpFile レジストリ エントリを使用できます。 詳細については、「 メモリ ダンプの宛先パスを構成する」を参照してください。

詳細については、「 DedicatedDumpFile レジストリ値を使用してシステム ドライブの領域制限を克服する方法」を参照してください。