在登录过程之前/期间如何分析性能问题?


Answers:


35

使用过程监控器

Process Monitor是一个工具,它将收集所有正在运行的进程的文件系统,注册表和网络事件。然后可以分析收集到的事件,以确定在某些情况下系统(或应用程序)在内部的行为方式。

在这种情况下,我们希望利用该工具来确定启动过程中花费了较长时间才能完成的事件。

  1. 下载并运行Process Monitor

  2. 在“ 选项”菜单中,选中“ 启用启动日志记录”

    启用启动日志记录

  3. 在出现的对话框中,选中生成概要分析事件,然后单击确定

    生成分析事件

  4. 重新启动系统并复制您的问题。登录过程完成后,启动过程监视器。

  5. Process Monitor将通知您它收集了启动时活动,并询问您是否要立即保存该数据。单击确认过程。

    保存启动时活动

  6. 选择文件的适当存储位置,.pml然后等待数据转换。加载数据后,通过打开列标题之一上的上下文菜单并单击“ 选择列...”来显示“ 持续时间” 列。

    选择列...

    ...并在出现的对话框中选中相应的复选框。

    持续时间复选框

  7. 通过从“过滤器”菜单中选择“ 过滤器...”来创建新的过滤

    筛选器菜单

  8. 为“ 持续时间”列创建一个过滤器,该过滤器的值大于1,在这种情况下,应包括 “条目” 。单击“ 添加”将过滤器添加到列表,然后单击“确定”确认选择。

    在此处输入图片说明

  9. 此时,Process Monitor中的事件列表将仅显示完成时间超过1秒的事件。您将要检查“ 持续时间”列,以了解花费很长时间才能完成的事件。

    出于演示目的,这里选择了一些事件,这些事件花费了超过10秒的时间才能完成。为了演示目的,将其捕获在虚拟机中。

    事件示例
    点击放大

    虽然这些事件不一定非要阻止登录过程完成,但禁用Windows Indexing服务和Avast Anti-Virus在此安装上还是值得尝试的。

使用xperf

xperf是Windows Performance Toolkit中的性能分析工具。使用它并能够分析收集的数据可能是一个挑战。不过,我们将看到如何收集所需的数据以及如何查看其相关部分。

请注意,为此所需的Windows评估和部署工具包(ADK)仅在Windows 7及更高版本上有效。

  1. 下载Windows ADK并至少安装Windows Performance Toolkit组件。

  2. 安装完成后,打开提升的命令提示符。

    高架命令提示符

  3. 转到要在其中放置跟踪的目录。就像桌面一样。

  4. 建议的方法(根据使用XBOOTMGR捕获缓慢的启动,或由缓慢启动引起的缓慢登录)在引导过程中捕获跟踪:

    xbootmgr -trace boot -traceflags base+latency+dispatcher -stackwalk profile+cswitch+readythread -notraceflagsinfilename -postbootdelay 10

    系统现在将启动跟踪并重新启动。

  5. 重新启动后,请按照屏幕上的说明进行操作。系统将要求您允许收集过程提升。该过程完成后,您将在启动跟踪的文件夹中找到结果跟踪。

    就我而言,它在桌面上创建了一个boot_1.etl(和相应的boot_1.cab)。

    .etlWindows Performance Analyzer中打开文件。

分析

打开跟踪之后,您已经可以看到问题可能与硬件绑定的迹象。快速浏览Graph Explorer中的ComputationStorageMemory概述将显示需要进一步分析的峰。

出于演示目的,让我们看一下“ 按过程使用情况”图。要显示内容,只需双击图形即可将其添加到“ 分析”视图中。

Windows Performance Analyzer概述
点击放大

请注意,所有图表均未显示任何相关峰。开始时的蓝色峰值属于系统进程,预计在此时发生。

在上下文中可以更好地查看“ CPU使用率”图中的其他峰值。因此,让我们向Analysis视图添加另一个图形。我们正在寻找的图是“ 引导阶段”图,该图位于“ 系统活动”部分。

启动阶段
点击放大

在上面的屏幕截图中,我还在底部添加了“ 通用事件”图,以提供其他上下文。但是,此处注意的事实是,CPU使用率的第一个可见峰值是由Avast服务引起的。我们已经在Process Monitor分析中注意到,该过程是启动过程中花费大量时间的过程之一。

我们还看到这里,现在我们可以看到它在启动阶段的背景下,是高峰期发生Winlogon中初始化阶段(甚至在后启动阶段发生的时候,你已经可以看到桌面)。因此,在我们看到桌面之前,该过程实际上不可能在阶段中给我们造成问题。

我们要寻找的是Winlogon Init阶段中或附近发生的事件。为了简化操作,您可以在“ Boot Phases”(引导阶段)图中选择阶段。这将突出显示该阶段发生的所有图中的所有条目。

更好看的图肯定是“ 服务”图,因为其中大多数是在Winlogon Init阶段启动的。

就像我在简介中所说的那样,分析这些数据可能会很复杂,除非一旦打开跟踪,问题就直接跳到了您身上。但是,这绝对是分析问题的正确工具。根据情况,您甚至可能希望使用它来收集堆栈跟踪信息以进行更深入的研究。但是,此过程远远超出了本文的范围。

进一步阅读


WPT中的xbootmgrmsfn.org/board/index.php?showtopic=158252)是入门的更好工具。我仅使用ProcMon日志记录来更深入地了解启动的特殊阶段。
magicandre1981

@ magicandre1981:帖子尚未完成;)如果您想向其中添加有关xperf的更多详细信息,请随时进行编辑。
Der Hochstapler,2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.