常见的“深入分析”问题

评估设置预定义的分析阈值,用于完成正在测量的活动。 评估在活动持续时间超过阈值时识别并报告问题。 Windows 评估工具包执行高级问题分析中的某些评估。 可以在 Windows Assessment Console 和 Windows 评估服务 - 客户端 (Windows ASC) 中查看这些问题,并在 Windows 性能分析器 (WPA) 中进一步分析。

评估生成的问题来自多个来源。 本主题介绍一些常见的高级分析问题。

问题格式

在 Windows Assessment Console 和 Windows ASC 中,评估报告的问题显示位置有 2 处:“结果视图”页的左列和右侧的详细信息窗格。 在“结果视图”页,问题、警告和错误显示在运行信息表和评估结果表中。 右键单击“问题”,然后选择分组依据条件,可以对问题进行分组。 在详细信息窗格中,问题按严重性排序。 可以使用关键字和元数据对其进行筛选。 有关详细信息,请参阅分组、筛选和搜索问题

使用“结果视图”中的链接打开 WPA 时,可以在 WPA“问题”窗口中看到评估标识的问题列表。 选择其中一个问题时,WPA“详细信息”窗口中将显示详细信息和建议的解决方案。 有关 WPA 的详细信息,请参阅 Windows 性能分析器

Windows Assessment Console 和 Windows ASC 的详细信息窗格中出现的大多数问题都有相同的结构,其中包括:

  • 标题

    标题包含有关问题的基本信息,例如可量化问题的指标以及受影响活动的名称。 标题信息还可以包含评估在检测到问题时所处的阶段。

  • 建议

    只要有可能,详细信息窗格就会提供步骤以解决检测到的问题。 它有时提供有助于进一步调查问题的指南。 此信息可能包括多种方法或最佳做法,可帮助优化性能或以其他方式克服评估确定的问题。

  • 详细信息

    在某些情况下,详细信息窗格会提供其他信息(指向网站的链接),其中提供有关解决此问题可采取步骤的相关信息。

  • 进一步分析

    对于高级分析问题,详细信息窗格提供“WPA 深入分析”链接,以便您可以打开 WPA 并进一步调查问题的根源。

    打开 WPA 后,可能会提供其他详细信息,具体取决于评估确定的问题类型,如:

    • 处理映像详细信息包括有关生成已确定问题的进程的文件和版本信息,其中包括:

      • 文件名
      • 文件路径
      • 文件说明
      • 文件版本
      • 制造商
    • 按文件列出的磁盘活动摘要,包括:

      • 磁盘读取和写入的大小和计数
      • 磁盘刷新计数
    • 按进程/线程列出的 CPU 活动摘要,包括:

      • 进程的每个线程对 CPU 时间的影响
      • 显示性能影响发生的位置和时间长度的调用堆栈
    • 由 CPU 或磁盘活动(按进程或线程)引起的延迟摘要,包括:

      • 延迟的线程或进程,包括延迟持续时间
      • 进程的每个线程的影响,包括延迟持续时间
      • 导致延迟或受其影响的每个线程的调用堆栈

注意

调用堆栈提供的信息是活动的统计表示形式。 其准确性取决于评估收集的样本。

托管代码

托管代码是指在 Microsoft .NET 公共语言运行时 (CLR) 下运行的代码。 CLR 管理基于 Microsoft .NET Framework 的应用程序的执行。 CLR 进程在 Windows 启动期间启动,并可能导致额外的资源消耗,这可能会延长启动时间。 在 CLR 初始化过程中,.NET Framework 读取的文件可能会增加数兆字节的存储读取,从而延迟启动过程和“开始”屏幕的出现。

问题示例

<X>.exe 是一种托管代码启动进程。

建议

对于托管代码类别中的问题,如果基于 .NET Framework 的应用程序或服务对 Windows boot 至关重要,则建议避免使用托管代码。 如果无法避免使用托管代码,我们建议延迟启动基于 .NET Framework 的应用程序或服务,以避免争用 Windows 启动其他必要的应用程序或服务所需的资源。

使用托管代码参与一些性能开销,每次调用的开销可能会变得很明显。 在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接以确定开销源,然后通过执行以下任一步骤来减少延迟:

  • 避免在启动路径中使用不必要的托管代码。
  • 使用任务计划程序稍后启动应用程序。
  • 仅按需或触发时启动应用程序。 有关详细信息,请参阅 [MSDN] 开发 Windows 的高效后台进程

处理器使用情况

应用程序和服务的高 CPU 使用率可能会导致用户体验不佳,如 UI 无响应、视频和声音故障。 当以正常或高优先级运行的进程线程超过处理器资源使用的阈值时,评估会将该过程标记为问题并计算延迟。 当单个进程使用过多的 CPU 时,其他进程可能会延迟,因为它们必须争用系统资源。 生成的问题在其对 CPU 的影响方面以红色或黄色编码。

问题示例

在快速启动恢复开启/关闭期间,进程 <X> 使用 CPU 5.3 秒。

建议

在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接,以确定进程中哪个功能需要进一步调查。 过度的处理器使用一次可能发生在多个线程中。 对于涉及的每个线程,请在 WPA 中查看函数调用堆栈。

注意

调用堆栈提供的信息是活动的统计表示形式。 其准确性取决于评估收集的样本。

存储使用量

进程可在运行时执行存储读取、写入或刷新。 由于硬盘驱动器是单个共享资源,因此过度或不必要地使用存储可能会导致评估识别重大性能问题。

问题示例

在快速启动恢复开启/关闭期间,进程 <X>.exe 从存储读取 23 兆字节 (MB)。

在快速启动恢复开启/关闭期间,进程 <X>.exe 刷新存储 12 次。

建议

在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接,以查看顶级文件 I/O 的摘要列表。 使用此列表可查找导致读取或写入过多的文件。 对于磁盘刷新,请找到指向源的调用堆栈。

  • 如果磁盘读取或写入过多,我们建议减少进程处理或延迟读取或写入的数据量。

  • 对于无法减少或延迟的 I/O,我们建议使用 64 KB 到 128 KB 的 I/O 大小,以避免可能会严重干扰其他未完成 I/O 活动的小型干扰流。

  • 磁盘刷新会影响其他进程的 I/O 活动。 只应在必要时执行磁盘刷新。

处理延迟

当线程使用 CPU 或磁盘资源时,将增加活动的持续时间。 处理器上的争用通常表现为线程饥饿和/或抢占。 此问题的分析部分包含受进程影响的所有线程,这些线程首先被抢占或发生饥饿,在进程完成后准备就绪。

线程等待工作完成。 工作完成后,DPC 将准备此等待线程。

等待线程的线程 ID 及其累计等待时间会显示在问题详细信息中。 展开问题详细信息以查看此线程的等待堆栈。

在复杂的活动中,线程等待另一个线程等待工作完成,这种情况很常见。 DPC、运行线程、计划程序或其他机制为最新的等待线程做好准备。 此最新的等待线程再次运行,并读取等待它的线程。 此过程将重复每个等待线程,直到最早的等待线程准备就绪并再次运行。

问题详细信息按时间顺序描述此控制转移序列。 例如:

进程 csrss.exe 的线程 712 (600) 等待 374 毫秒

进程 explorer.exe 的线程 2724 (1836) 等待 374 毫秒

进程 explorer.exe 的线程 4748 (1836) 休眠 373 毫秒

计时器 DPC 准备线程 4748

线程 4748 准备等待线程 2724

线程 2724 准备等待线程 712

在活动期间,相同的控制转移序列可能会重复多次。 等待时间为累计时间。

选择描述某等待线程的句子,以查看包含等待函数的堆栈。 选择描述某线程使另一个线程就绪的语句,以查看显示就绪函数的堆栈。

在上面的示例中,最内层线程 4748 的等待堆栈通常可以更好地理解延迟源。 等待函数前面的堆栈帧以及堆栈后面的文件信息可能会提供有关该问题的更多见解。

处理延迟的类型包括:

  • CPU 使用

    当线程运行时(无论正在分析的活动中的优先级如何),它会占用 CPU 时间,影响活动的总时间,并可能延迟完成时间。

    问题示例

    进程 <X> 的 CPU 使用使“快速启动恢复资源管理器初始化”活动发生 125 毫秒的延迟。

    建议

    在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接,以分析导致延迟的线程的调用堆栈。

  • 饥饿

    进程运行期间发生的线程饥饿会导致活动完成出现延迟。 当线程准备好运行但被其他线程阻止立即运行时,线程会发生饥饿。

    问题示例

    进程 <X> 饥饿。 饥饿会导致“快速启动恢复资源管理器初始化”活动 50 毫秒的延迟。

    建议

    在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接,以查看哪个线程发生饥饿,哪个线程或哪些线程阻止了饥饿线程的运行。 通过查看问题详细信息并观察函数调用堆栈,确定线程饥饿的原因。

  • 优先

    当另一个具有较高优先级的线程运行时,正在运行的线程将被抢占。 优先级较高的线程会导致在其他线程的活动完成时出现延迟。

    问题示例

    进程 <X> 被抢占。 抢占会导致“快速启动恢复资源管理器初始化”活动发生 150 毫秒的延迟。

    建议

    有关线程计划的详细信息,请参阅线程计划

  • 休眠

    线程在调用其中一个可用 Windows 睡眠函数(如“SleepEx”)时处于睡眠状态。 这会在线程活动的完成过程中引入延迟。

    问题示例

    进程 <X> 休眠 4.0 秒,使“快速启动挂起设备 BAR”活动发生延迟。

    建议

    在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接。 可以从函数调用堆栈和文件信息确定意外线程睡眠的原因。

存储 I/O 延迟

当线程使用存储资源时,可能会增加活动的持续时间。 当多个线程争用存储时,生成的随机磁盘查找会使延迟更严重。

存储延迟的类型包括:

  • 存储读取和写入

    以下问题包含在活动期间读取(或写入)导致的所有延迟的总和。

    问题示例

    快速启动恢复资源管理器初始化活动会导致 1.2 秒的延迟,因为从存储器读取 2.3 MB。

    建议

    在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接,以优先查看按最高延迟排序的线程以及在此活动期间提高性能的建议。

  • 存储刷新

    以下问题显示了在活动中导致延迟的所有刷新的总和。

    问题示例

    快速启动恢复资源管理器初始化活动会导致 300 毫秒的延迟,因为刷新存储器 4 次。

    建议

    在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接,以查看导致磁盘刷新的每个线程的调用堆栈,并识别导致活动延迟的相关代码。

注册表刷新

当进程完成注册表修改后显式使用“RegFlushKey”函数时,将发生注册表刷新。 评估已确定,注册表刷新可能是导致用户感知的性能问题的重要原因。

不需要对注册表的每次更改都使用“RegFlushKey”函数。 仅当必须立即将注册表更改应用于磁盘时,此函数才适用。

有 2 种类型的注册表刷新问题:

  • 标识为刷新注册表一次或多次的进程。 这些问题归类为高优先级。

    问题示例

    在快速启动恢复开启/关闭期间,一个或多个进程刷新注册表配置单元。

    建议

    在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接,以检查导致此行为的进程的每个线程。 WPA 提供活动发生的相关函数调用堆栈。

  • 在活动期间刷新注册表并导致活动完成延迟的进程。

    问题示例

    进程 <X> 刷新注册表配置单元 405 毫秒,使“快速启动挂起呼叫订阅者配置文件”活动发生延迟。

    建议

    在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接,以分析进程中每个线程的函数调用堆栈。

时间核算

评估通常会报告每个活动的多个问题。 时间核算问题显示了多个问题所占总时间,以及问题未考虑的活动的任何部分。 如果某个活动包含许多短时问题,并且时间低于分析阈值,则不会将它们报告为单独的问题。 此设计有助于突出显示影响最大的问题,以便将调查重点放在这些问题上。

活动持续时间阈值

此阈值是整个活动预计花费的时间。 时间核算问题报告活动的测量持续时间以及评估设置的活动持续时间阈值。

最小分析阈值

当且仅当其所描述的影响大于分析阈值时,才会报告问题。

类型 1:

活动持续时间超过活动持续时间阈值。 该活动还存在超过分析阈值的问题。

问题示例

摘要:快速启动关闭进程 Example.exe 耗时 6.5 秒,并超过 2 秒的阈值。 评估确定了影响此活动的其他问题。 这些其他问题完全占据此活动时间。

类型 2:

活动持续时间超过活动持续时间阈值。 该活动还存在一系列复杂问题,有些问题大于分析阈值,另一些则小于分析阈值。

问题示例

摘要:快速启动关闭进程 Example.exe 耗时 6.5 秒,并超过 2.0 秒的阈值。 评估确定了影响此活动的其他问题。 这些其他问题占此活动时间的 5.9 秒。 剩余的 500 毫秒包含不超过最小分析阈值 150 毫秒的问题。

类型 3:

活动持续时间超过活动持续时间阈值。 影响此活动的所有问题都小于分析阈值,因此不会显示。

问题示例

摘要:快速启动关闭进程 Example.exe 耗时 6.5 秒,并超过 2.0 秒的阈值。 评估确定了影响此活动的其他问题。 影响此活动的其他问题未超过最小分析阈值 200 毫秒,因此会被忽略。

类型 4:

活动持续时间超过评估日志记录处于活动状态的时间段。 但是,当日志记录处于活动状态时,在活动中发现延迟。 这些延迟是由 CPU 或磁盘争用导致的。

问题示例

摘要:快速启动恢复开机开启/关闭后的持续时间未知,因为此活动在评估日志记录结束后完成。 此活动的 4 秒,而评估日志记录处于活动状态,原因是存在 CPU 争用情况。

建议

在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接,以在 Windows 性能分析器中查看此问题。 调查此活动的行为的详细信息,以了解报告延迟的根本原因。 请按照以下步骤查看相关问题:

  1. 使用筛选器选项可以查看与问题标题中引用的活动相关的所有问题。

  2. 查看问题的完整列表时,请选择加号 (+),然后从筛选器选项列表中选择“活动”。

  3. 在“问题活动”筛选器框中,键入活动的名称。 从命名活动列表中选择特定活动。 您将获得与此时间核算摘要问题相关的问题筛选列表。

有关如何发现相关问题的详细信息,请参阅分组、筛选和搜索问题

缺失符号

某些评估需要访问符号。 在某些情况下,如果符号服务器不可用,则评估结果中的信息可能不正确或不完整。 在许多情况下,Internet 连接和对 Microsoft 公共符号服务器的访问都满足此依赖关系。 在其他情况下,可以设置专用符号服务器,或在本地计算机上安装符号。

使用的符号类型包括:

  • 关键符号:如果这些符号不可用,则评估无法完成对其收集数据的完整分析。 在这种情况下,问题文本将包含在评估分析期间未配置符号且可用的模块的特定模块名称。

  • 第三方组件符号:如果这些符号不可用,则评估将会成功完成,但其结果可能不正确或不完整。 在 Windows 性能分析器中查看时,生成的问题详细信息可能包含不完整或不正确的信息。 例如,在查看“问题详细信息”部分时,显示的调用堆栈可能缺少特定组件的函数名称。

  • 内核符号:内存占用量评估使用内核符号进行分析。 如果未找到配置的这些符号,则会在评估完成后提到缺少符号的结果中创建问题。

建议

缺少关键符号:请确保计算机有权访问 Microsoft 公共符号服务器。 若要解决此问题,可以指向正确的符号位置,或在本地驱动器上安装符号。

缺少非 Microsoft 组件的符号:这些缺少的符号可能适用于您自己拥有的组件,也可能是其他合作伙伴所拥有的组件。 与合作伙伴协作,为缺少符号的组件获取这些第三方符号,并在重新运行评估之前,在计算机上配置正确的符号路径。

注意

有关设置正确符号路径的详细信息,请参阅 Windows 评估服务疑难解答

在生态系统中的合作伙伴之间共享组件的符号,通过可靠且高效的 bug 分类和分析过程,确保更好地进行协作。 我们建议合作伙伴定义这些协作关系,这将确保您拥有查找系统组件上所报告问题的根本原因所需的资源。

DPC 和 ISR

长时间运行的延迟过程调用 (DPC) 和中断服务例程 (ISR) 会引入延长活动持续时间的延迟,用户可能会发现这种延迟是性能问题。

DPC(和 ISR)问题通常需要由熟悉与 DPC(或 ISR)相关工作的工程师进行更深入的分析。 此问题的深入分析因导致延迟或资源使用的 DPC 类型而异。

使活动延迟的 DPC

线程等待工作完成。 工作完成后,DPC 将准备此等待线程。

等待线程的线程 ID 及其累计等待时间会显示在问题详细信息中。 展开问题详细信息以查看此线程的等待堆栈。

在复杂的活动中,线程等待另一个线程等待工作完成,这种情况很常见。 DPC、运行线程、计划程序或其他机制为最新的等待线程做好准备。 此最新的等待线程再次运行,并读取等待它的线程。 此过程将重复每个等待线程,直到最早的等待线程准备就绪并再次运行。

问题详细信息按时间顺序描述此控制转移序列。 例如:

进程 csrss.exe 的线程 712 (600) 等待 374 毫秒

进程 explorer.exe 的线程 2724 (1836) 等待 374 毫秒

进程 explorer.exe 的线程 4748 (1836) 休眠 373 毫秒

计时器 DPC 准备线程 4748

线程 4748 准备等待线程 2724

线程 2724 准备等待线程 712

在活动期间,相同的控制转移序列可能会重复多次。 等待时间为累计时间。

选择描述某等待线程的句子,以查看包含等待函数的堆栈。 选择描述某线程使另一个线程就绪的语句,以查看显示就绪函数的堆栈。

在上面的示例中,最内层线程 4748 的等待堆栈通常可以更好地理解延迟源。 等待函数前面的堆栈帧以及堆栈后面的文件信息可能会提供有关该问题的更多见解。

与 DPC 相关的延迟可分为三种类型,如以下示例中所示。

问题示例

网络 DPC:网络使用使快速启动整体恢复活动延迟 4.0 秒

计时器 DPC:“快速启动关闭进程 Example.exe”活动的延迟为 5.3 秒

快速启动挂起设备 BAR 活动会因等待线程而导致 2.6 秒的延迟。 DPC Example.sys 准备此等待线程。

活动期间发生的 DPC 或 ISR

此类问题突出显示了可能影响方案性能的冗长 ISR 或 DPC。 这些问题与 ISR/DPC 活动与延迟持续时间无关。

“问题详细信息”列出了 ISR/DPC 抢占的每个线程。 列表大致按抢占时间降序排列。 展开列表中的线程以查看接近 ISR/DPC 抢占的线程活动的堆栈。

问题示例

在媒体引擎生存期内,DPC 超过 1.0 毫秒阈值 5 次。 此 DPC 的 5 个实例总共运行 3.7 秒

注意

调用堆栈中提供的信息是有关活动的统计表示(每隔一毫秒采样一次),其准确性取决于评估收集的样本。

摘要问题

摘要问题包含评估所标识的问题的概述,这些问题演示了特定的性能行为,并有助于直观显示这些问题对系统的更广泛影响。 以下是评估结果中可能包含的不同类型的摘要问题。

活动磁盘内存占用情况摘要

磁盘占用量是在活动期间以存储读取、写入和刷新形式发出存储 I/O 的所有进程的组合。 除了评估结果中已报告的存储使用问题之外,此摘要还提供了有关磁盘占用空间的更多见解。

WPA 中问题的详细信息包含文件映像信息,以及用于提高方案性能的建议。 此分析还包含导致磁盘占用空间的进程列表,并按影响的降序排列。

问题示例

摘要:快速启动整体恢复问题读取和写入 275MB,并刷新存储器 82 次

注意

当在“结果视图”页上按“类别”对问题进行分组时,此摘要问题会显示在“存储器使用”组下相关问题的上方。

处理器使用摘要

处理器使用摘要问题汇总了评估中已确定的类似问题以及活动期间影响较小的问题。 此摘要提供了所有相关处理器使用问题的更广泛视角。

摘要问题按影响降序提供每个进程的详细信息。 对于每个进程,此问题都会显示一个函数调用堆栈,该堆栈结合了进程中所有线程的活动以及 CPU 和文件映像信息。 单个问题(如果存在)包含每个适用线程的更详细的函数调用堆栈。

问题示例

摘要:在快速启动整体恢复期间,进程使用的 CPU 时间为 26.9 秒

注意

当在“结果视图”页上按“类别”对问题进行分组时,此摘要问题会显示在“处理器使用”组下相关问题的上方。

处理器和磁盘争用摘要

此问题汇总了对处理器和磁盘资源的争用导致的活动延迟。 争用活动会影响对完成方案至关重要的任务。 问题详细信息列出了所涉及的不同子活动,并按争用量降序排列。

其他信息(如每个线程的函数调用堆栈和文件信息)在评估报告的每个单独问题中提供。

问题示例

摘要:快速启动整体挂起耗时 29.5 秒。 由于 CPU 争用,此时为 300 毫秒。

当在“结果视图”页上按“类别”对问题进行分组时,此摘要问题会显示在“处理器延迟”组下相关问题的上方。

建议

摘要问题有助于调查影响最大的问题。 阅读摘要问题通常有助于深入了解这些问题组成整体的广泛影响。

若要获得摘要问题的全部优势,可以使用这两个条件中的一种将问题列表分组到 Windows Assessment Console。

  • 类别。 这是“摘要问题”的默认和推荐视图,其中它们与特定类型的相同/可比较问题组合在一起。

  • 测试用例。 在此视图中,摘要问题与适用于特定活动或测试用例的问题子集一起分组。

警告

调用堆栈中提供的信息是有关活动的统计表示(每隔一毫秒采样一次),其准确性取决于评估收集的样本。

评估日志记录

评估依赖于 Windows 事件跟踪 (ETW) 日志记录来收集用于分析的数据。 此日志记录使用系统资源。 此问题类别用于评估正在运行时所发生的存储活动。

问题示例

在快速启动恢复开启/关闭期间,评估将 39 MB 记录到存储。

建议

在此问题的“进一步分析”区域中,选择“WPA 深入分析”链接,以查找有关存储写入日志文件的信息。

Windows Assessment Console

评估