web-dev-qa-db-ja.com

Windowsのシャットダウンが遅い原因を特定するにはどうすればよいですか?

コンピューターのシャットダウンに非常に長い時間がかかります。

どうすれば原因を特定できますか?コンピュータがシャットダウンするまで数分待ちたくない...

シャットダウンにかかる時間を追跡するために使用できるプログラムはありますか?

30
wizlog

Windowsは パフォーマンスカウンター と同様に イベントトレース を提供します。優れたツールキット: Windows Performance ToolkitWindows SDK で利用できます。

このツールキットにはxbootmgr.exeがあり、これは Windows On/Off Transition Performance Analysis を意味します。

上記のリンクされたドキュメントは、すべてのオン/オフ遷移のすべての詳細に行きますが、xbootmgrとxperf GUIを使用してシャットダウン遷移を追跡および分析することに関する一般的な考え方は次のとおりです。

  1. Windows SDKをダウンロードし、それを使用してWindows Performance Toolkitをインストールします。

  2. 管理者としてコマンドプロンプトを開き、次のコマンドを実行します。

    cd %ProgramFiles%\Microsoft Windows Performance Toolkit

  3. 今後サポートが必要な場合は、xbootmgr -helpだけでなくxperf /?も入力できます。

  4. 次のような再起動トレースを実行します。

    xbootmgr -trace shutdown -traceFlags BASE+DIAG+LATENCY -noPrepReboot

  5. 起動後、2分以内にトレースが生成されます。

  6. トレースは%ProgramFiles%\Microsoft Windows Performance Toolkitに保存されています。xperf.exeにドラッグすると、GUIで開きます。

  7. さまざまなグラフを含むGUIが表示されます。左側の矢印を使用すると、グラフを追加/削除できます。

  8. グラフを見て、通常とは異なる何かを特定できるかどうかを確認します。必要に応じて、間隔を選択して拡大できます。全体を表示するには、右クリックしてズームを解除します。

  9. 各グラフについて、右クリックしてサマリーテーブルを取得できます現在選択されている間隔

  10. これらの表では、重量または時間で並べ替えて、最も費やしている金額を特定します。列をドラッグできるので注意してください。たとえば、I/Oテーブルを使用すると、最高使用プロセスと最高使用パスをチェックアウトできます。

    仕切り(黄色のヘッダー列)は、右側の列が左側の列の合計を示すように分割します。したがって、最初にパス、次にプロセスがある場合、ファイルのツリーを開いて、どのプロセスがアクセスしたかを確認し、そのプロセスとファイルの組み合わせの合計を取得できます。

  11. グラフとテーブルがどのように機能するかについての詳細は、 ここ を参照してください。

  12. どういうわけかスタックトレースを調べるために下に行く必要がある場合。別のブートトレースを実行し、-stackWalk profileパラメータ _ NT_SYMBOL_PATHを設定 を追加して、グラフを右クリックし、[シンボルのロード]を有効にします。これにより、実際に呼び出している関数を確認することができますが、通常、シャットダウンには必要ありません。ただし、ファイアウォールがプログラマーとしてデバッガーに干渉していることを発見するなどの可能性があります。かなり気の利いた...

幸運を祈ります。犯人を見つけていただければ幸いです。そうでない場合は、トレースをドロップし、私たちはあなたのために見ていきます...

DPCは Deferred Procedure Calls であり、割り込みは Software Interrupts であることに注意してください。どちらもドライバー/ハードウェアに関連しています。

31
Tamara Wijsman

実行に長い時間がかかるシャットダウン。以下は Tom's answer の私の例です。

最初のグラフは、問題 Disk I/O を示しています。

enter image description here

シャットダウンに1分以上かかり、すべてハードドライブI/Oです。

次のグラフ、 Disk Utilization は、ドライブの使用率が100%でほぼ最大であることを示しています。

enter image description here

最後のグラフは、プロセス別ディスク使用率を示しています。

enter image description here

フィルタリングして、すべて[WinInit.exe]が原因であることがわかります。

enter image description here

ハードドライブのグラフを右クリックして Summary Table を選択すると、どのファイルがどのプロセスによってアクセスされたかの詳細を取得できます。

enter image description here

シャットダウンの56.4秒は、WinInitC:\hiberfil.sysに6.7GBを書き込むことによって費やされました。


しかし、質問はなぜ Windowsがshutdownで休止状態ファイルに書き込んでいるのですか?

次に、シャットダウン時にそのページングファイルをワイプするためにオンにしたオプションを思い出しました。

  • スタート->実行-> SecPol.msc
    • セキュリティ設定、ローカルポリシー、セキュリティオプション
    • シャットダウン:仮想メモリのページファイルをクリアする

enter image description here

だから私はオプションを無効にし、xbootmgrを再度実行します。今私のシャットダウンは22秒です:

enter image description here

System _unknownファイルへの書き込みによって、9sシャットダウンの22sが消費されます。これは、さらに調査する価値があります。

しかし、今のところ、1分半のシャットダウンを解決しました。


私はさらに進んで、22秒間の遅いシャットダウンを解決しました。 t = 12sからt = 21sまでは、100%ディスク使用率を示しましたが、ゼロディスクI/O を示しました。それは不可解でした。

1回のシャットダウンの間、ドライブの1つが回転するというおなじみの音が聞こえました。 Windowsがスリープ状態になったディスクにアクセスしようとしたため、シャットダウンが9秒間停止しました。 9秒後にドライブが応答し、1秒後にマシンの電源が切れました。

皮肉なことに、Windowsがディスクをウェイクアップして、スリープ状態に入るときが来たことを通知します。

これにより、実際のシャットダウンは13.5秒になります。それはもっと調査する価値があるかもしれません。しかし、今のところ、22秒のシャットダウンを解決しました。

22
Ian Boyd