OS がハングアップしてしまう事象の調査 (仮想環境/サーバー OS/クライアント OS)

目次

本記事はマイクロソフト社員によって公開されております。

いつも弊社製品をご利用いただきまして誠にありがとうございます。 Windows プラットフォーム サポートの石田です。 弊社にお問い合わせいただく際に、事前に採取しておいたほうが良い内容についてご紹介させていただきます。 今回のテーマは「仮想化環境のサーバーおよびクライアント OS がハングアップする事象が発生した際に、採取すべき資料について」です。

  • 採取いただく資料
    • メモリダンプファイル (%systemroot%\Memory.dmp) ※ 再現性がある場合
    • サポートログ情報 (shaclollector の support オプションのログ) ※ Hyper-V 環境の場合は、Hyper-V ホスト OS と対象のゲスト OS の両方で採取

[A] 事象の再現性がある場合

  1. 完全メモリーダンプの設定を行います。

    1. PageFile の大きさを 物理メモリ + 400 Mbyte 以上の大きさに設定します。

      例えば、物理メモリ 8192 MB( 8 GB)を搭載の場合は、初期サイズに 8592 MB 以上を設定します。

      a) [スタート] - [コンピュータ] を右クリックし [プロパティ(R)] をクリックします。

      b) [システムの詳細設定(A)] をクリックします。

      c) [詳細設定] タブの [パフォーマンス] にある [設定(S)] をクリックします。

      d) [詳細設定] タブの [仮想メモリ] の項目にある [変更(C)] ボタンをクリックします。

      e) この画面にて、[すべてのドライブのページング ファイルのサイズを自動的に管理する(A)] オプションを外します。

      f) システムボリューム (通常 C: ) をクリックします。

      g) [カスタムサイズ] にチェックを付け、[初期サイズ]、[最大サイズ] の両方に物理メモリ + 400 Mbyte 以上の値を入力します。

      h) その後 [設定] ボタンをクリックし設定を反映させ [OK] ボタンをクリックします。

      i) “変更結果はコンピューターを再起動しなければ有効になりません。” というポップアップが表示されますので、[OK] ボタンをクリックします。

      j) “パフォーマンス オプション” のウィンドウも [OK] ボタンにて閉じます。

    2. 完全メモリ ダンプ (Full Dump) を取得するためのレジストリを設定します。

    a) コマンドプロンプトを管理者モードで起動します。

    b) レジストリの設定を行うため、以下のコマンドを実行します。

      ※ reg コマンドは1行ずつ正確に実行してください。
      ```
      reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl /v CrashDumpEnabled /t REG_DWORD /d 0x1
      ```
      ※ Windows Server 2008/2008 R2 および Windows 7 の場合は NMICrashDump も設定します。
      ```
      reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl /v NMICrashDump /t REG_DWORD /d 0x1
      ```
      ※ クライアント OS の場合は AlwaysKeepMemoryDump も設定します。
      ```
      reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl /v AlwaysKeepMemoryDump /t REG_DWORD /d 0x1
      ```
    
    1. OS を再起動し、上記設定変更を反映させます。
  2. 現象が発生しましたら、仮想化基盤側よりダンプスイッチ (NMI) を対象の仮想マシンへ送信します。

    ※ ダンプスイッチ (NMI) の送信方法はご利用の仮想化基盤製品ごとに異なりますので、Hyper-V および Azure 環境以外をご利用の場合は仮想マシンに対して NMI を送信する方法について対象の製品サポートベンダー様へご確認の上、ご実施をお願いいたします。

    以下、Hyper-V ホストおよび Azure 環境での操作方法となります。

    Hyper-V ホストが Windows Server 2008/2008 R2/2012 の場合

    1. 以下 URL の DumpVM.txt をコピーし拡張子を vbs へ変更し、ホスト OS の適当な場所 (デスクトップなど) に保存します。

      https://jpwinsup.github.io/blog/2021/02/15/Performance/Hang_BSOD/ForcingSystemCrash/DumpVM.txt

    2. Hyper-V ホスト OS にて管理者権限のあるコマンドプロンプトを起動し以下のスクリプトを実行します。

      ※ DumpVM.vbs をデスクトップに保存した場合の実行例

      cd %userprofile%\desktop
      cscript DumpVM.vbs  -v "ダンプを取得する仮想マシン名"
      

      ※ 仮想マシン名にスペースを含む場合はダブル コーテーションで括ってください。DumpVM.vbs 実施後、ゲスト OS はブルースクリーンになり、完全メモリーダンプが取得されます。

    3. ゲスト OS でブルースクリーンが発生し再起動しましたら、完全メモリー (既定: C:Windows\MEMORY.DMP) をご取得ください。

    Hyper-V ホストが Windows Server 2012 R2 以降の場合

    1. Hyper-V ホスト OS にて管理者権限のある PowerShell プロンプトを起動し、以下のように Debug-VM コマンドレットを実行し NMI をゲスト OS へ送信します。
    Debug-VM -name "ダンプを取得する仮想マシン名" -InjectNonMaskableInterrupt -Confirm:$false -Force
    
    1. ゲスト OS でブルースクリーンが発生し再起動しましたら、完全メモリー (既定: C:Windows\MEMORY.DMP) をご取得ください。

    Azure 仮想マシンの場合

    1. 以下の公開情報をご参考に完全メモリーダンプを採取します。

    Azure VM (Windows) で完全メモリ ダンプを採取する方法 https://blogs.technet.microsoft.com/jpaztech/2018/08/27/how_to_get_a_complete_memory_dump/

  3. 再起動しましたら、以下の URL より “shacollector.zip” をダウンロードおよび展開いただき、対象端末へ配置します。

    ※ Hyper-V 環境の場合は、Hyper-V ホスト OS と対象のゲスト OS の両方に対して以下の同様の手順で採取します。

    ダウンロード先: shacollector.zip

    shacollector の使い方についてはこちら

    (注意) shacollector は機能の拡張などにより内容が変更されることがあります。 そのため、毎回上記のダウンロード先から shacollector を取得いただき利用してください。

  4. 管理者権限のコマンドプロンプトから配置した “shacollector” フォルダーへ移動して、以下のコマンドを実行の上、サポート情報ログの採取を実施します。

    shacollector.bat support all C:\mslog
    

    ※ 出力先フォルダー名に C:\mslog 以外のフォルダーを指定することも可能です。

  5. 作成された完全メモリーダンプファイル (MEMORY.DMP) と生成されましたログの出力先フォルダーを圧縮の上、弊社までご提供ください。

[B] 事象の再現性がない場合

事象に再現性がない場合は、原因の特定が困難になります。システム構成やログから過去の類似事例を調査いたしますので、以下の Web ページ記載の資料採取をお願いします。

初期調査にご取得いただくログ情報

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。