我如何找出导致 Windows 关机缓慢的罪魁祸首?

我如何找出导致 Windows 关机缓慢的罪魁祸首?

我的计算机需要很长时间才能关机。

我如何才能找出罪魁祸首?我不想等几分钟才让电脑关机……

是否有一个程序可以用来跟踪关机需要多长时间?

答案1

Windows 提供性能计数器事件追踪它允许应用程序进行性能分析,以便可以查明性能问题的原因,其中有一个出色的工具包:Windows 性能工具包可在Windows SDK

在此工具包中,您将找到xbootmgr.exe适用于Windows 开/关转换性能分析

尽管上面链接的文档详细介绍了每次开/关转换,但这里是使用xbootmgrxperf GUI 跟踪和分析关机转换的一般思路:

  1. 下载 Windows SDK,然后使用它安装 Windows 性能工具包。

  2. 以管理员身份打开命令提示符,然后运行:

    cd %ProgramFiles%\Microsoft Windows Performance Toolkit

  3. 如果您以后需要帮助,您可以xbootmgr -help输入xperf /?

  4. 像这样进行重启跟踪:

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

  5. 启动后,两分钟内就会产生痕迹。

  6. 该跟踪已保存在 中%ProgramFiles%\Microsoft Windows Performance Toolkit,您可以将其拖到 上xperf.exe,它将在 GUI 中打开。

  7. 您将看到一个带有不同图表的 GUI,左侧的箭头允许您添加/删除图表。

  8. 查看图表,看看是否能发现任何异常,您可以选择一个间隔并放大它(如果您愿意)。如果想查看整体,请右键单击并缩小。

  9. 对于每个图表,您可以右键单击以获取汇总表当前选定的间隔

  10. 在这些表中,按权重或时间排序,找出花费最多的是哪个。请注意,您可以拖动列,例如,I/O 表允许您查看使用率最高的流程以及使用率最高的路径。

    分隔线(黄色标题列)使得其右侧的列显示其左侧列的总数。因此,如果您先有路径,然后有进程,那么您可以打开某个文件的树以查看哪些进程访问了该文件,然后获得该进程/文件组合的总数。

  11. 您可以找到有关图表和表格如何运作的更多信息这里

  12. 如果你需要深入查看堆栈跟踪,请执行另一个启动跟踪并附加参数-stackWalk profile设置 _NT_SYMBOL_PATH然后右键单击任何图表并启用“加载符号”。这将允许您检查它实际调用的函数,一般来说,您在关机时不需要这个;但它可以允许诸如发现防火墙正在干扰您作为程序员的调试器之类的事情。非常漂亮...

祝你好运,希望你能找到罪魁祸首。如果不能,就留下线索,我们会帮你看看……

请注意,DPC 是延迟过程调用和中断是软件中断,都与驱动程序/硬件相关。

答案2

我的关机需要很长时间才能完成。以下是我的示例汤姆的回答

第一个图表显示了问题,磁盘 I/O

在此处输入图片描述

我的关机花了一分多钟,而且都是硬盘 I/O。

下一个图表磁盘利用率显示驱动器的使用率已接近 100%:

在此处输入图片描述

最终图表显示进程的磁盘利用率

在此处输入图片描述

经过筛选我意识到这一切都是由以下原因造成的WinInit.exe

在此处输入图片描述

右键单击任意硬盘图表并选择汇总表,我可以获得哪些文件被哪些进程访问的详细信息:

在此处输入图片描述

我关机时花了 56.4 秒将WinInit6.7GB 写入C:\hiberfil.sys


但问题是为什么Windows 是否正在写入我的休眠文件关闭

然后我想起我打开了一个选项来清除它页面文件关机时:

  • 开始 -> 运行 -> SecPol.msc
    • 安全设置、本地策略、安全选项
    • 关机:清除虚拟内存页面文件

在此处输入图片描述

所以我禁用了该选项,然后xbootmgr再次运行。现在我的关机时间为 22 秒:

在此处输入图片描述

现在关机9s22s时间都花在System写入某个unknown文件上了。这可能值得进一步调查。

但是现在我已经解决了一分半钟的关机问题。


我进一步解决了 22s 关机缓慢的问题。从 t=12s到 t=21s显示 100%磁盘利用率,但为零磁盘 I/O. 真是令人困惑。

直到一次关机时,我听到了熟悉的硬盘旋转的声音。由于 Windows 试图访问已进入睡眠状态的磁盘,因此关机暂停了 9 秒。九秒后,硬盘响应,片刻之后,机器关闭。

讽刺的是,Windows 唤醒磁盘是为了告诉它该进入睡眠状态了。

这将使我的实际关机时间为 13.5 秒。这可能值得进一步研究。但目前我已经解决了 22 秒关机的问题。

相关内容