如何确定 Windows 缓慢关闭的罪魁祸首?

wiz*_*log 30 windows shutdown performance

我的电脑需要很长时间才能关机。

我怎样才能确定罪魁祸首?我不想等几分钟让我的电脑关机...

有没有程序可以用来跟踪关机需要多长时间?

Tam*_*man 32

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

在此工具包中,您会发现xbootmgr.exe,用于Windows On/Off Transition Performance Analysis

虽然上面链接的文档详细介绍了每个开/关转换,但这里是使用xbootmgrxperf 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. 启动后,它会在两分钟内生成一个跟踪。

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

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

  8. 查看图表,看看您是否可以识别出任何不寻常的东西,如果需要,您可以选择一个间隔并放大它。当您想查看整体时,右键单击并取消缩放。

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

  10. 在这些表格中,按重量或时间排序,以确定它在哪个方面花费最多。请注意,您可以拖动列,例如 I/O 表允许您查看最高使用进程以及最高使用路径。

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

  11. 您可以在此处找到有关图形和表格如何运作的更多信息。

  12. 如果您以某种方式需要向下查看堆栈跟踪;执行另一个引导跟踪并附加-stackWalk profile参数,设置 _NT_SYMBOL_PATH并右键单击任何图形并启用“加载符号”。这将允许您检查它实际调用的函数,但通常您不需要它来关闭;但它可以允许诸如发现您的防火墙正在干扰您作为程序员的调试器之类的事情。相当漂亮...

祝你好运,我希望你能找到罪魁祸首。如果没有,请留下痕迹,我们会为您寻找...

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


Ian*_*oyd 22

我的关机需要很长时间才能运行。下面是我与汤姆回答的例子。

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

在此处输入图片说明

我的关机时间超过一分钟,而且都是硬盘驱动器 I/O。

下图,磁盘利用率显示驱动器几乎达到 100% 使用率:

在此处输入图片说明

最后一张图显示了按进程划分的磁盘利用率

在此处输入图片说明

过滤下来我意识到这一切都是由WinInit.exe以下原因引起的:

在此处输入图片说明

通过右键单击任何硬盘驱动器图形并选择Summary Table,我可以获得有关哪些文件被哪些进程访问的详细信息:

在此处输入图片说明

我关机56.4秒所花费WinInit写6.7GB到C:\hiberfil.sys


但问题是为什么Windows 在关机时写入我的休眠文件?

然后我想起了我打开的一个选项,用于在关机时擦除该分页文件

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

在此处输入图片说明

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

在此处输入图片说明

现在9s的的22s停机所花费System写一些unknown文件。这可能值得更多调查。

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


我走得更远,解决了我 22 秒慢关机的问题。从 t=12s到 t=21s显示 100% Disk Utilization,但Disk I/O为零。这令人费解。

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

具有讽刺意味的是,Windows 会唤醒一个磁盘,告诉它该睡觉了。

这将使我的实际关机时间为 13.5 秒。这可能值得更多调查。但是现在我已经解决了我的 22 秒关机问题。