使用 性能监视器 排查问题

本文可帮助排查使用性能监视器的问题。

什么是性能监视器(perfmon)?

自 Windows 早期以来,已在各种迭代中可用,性能监视器是 Windows 中的 MMC 管理单元,可帮助监视系统使用情况和各种性能指标。 打开时的默认视图显示几个不同的区域和实时指标,其中包括:

  • 性能监视器:实时查看指标
  • 数据收集器集:在给定的时间间隔内定义的数据收集
  • 报告:数据收集器集中收集的数据

数据收集前的问题

遇到问题后,请详细了解任何故障排除和数据收集之前发生的情况。

  • 哪种问题?
  • 是否可以重现此问题?
  • 此问题是否偶尔发生? 如果是这样,用户执行了哪些操作?
  • 是否观察到模式? 如果是这样,哪种模式?
  • 它是否只发生一次,而不再次发生?

例如,偶尔会遇到高 CPU 使用率问题。 有时,此问题发生在系统启动五分钟后,有时在两小时后等。 未观察到任何模式。 查找任务管理器或其他监视工具时,无法观察它,或者不确定监视工具的输出是否显示正在发生的情况。

在这种情况下,需要系统资源的一般概述。 这可以通过长时间运行的性能监视器来实现。

注意

性能监视器无法访问内核,并且不记录此类信息。 此外,与其他日志记录工具相比,性能监视器是轻量级的,用于高 CPU 使用率问题,并且它是一种内置工具。 可以在本地或远程运行性能监视器。

在本地运行性能监视器

可以根据需要添加计数器。 打开提升的命令提示符并运行以下命令:

  1. 创建数据收集器集:

    Logman.exe create counter CORE_%computername% -f bin -v mmddhhmm -max 2048 -c "\Memory\*" "\Cache\*" "\Objects\*" "\Network Interface(*)\*" "\Paging File(*)\*" "\PhysicalDisk(*)\*" "\LogicalDisk(*)\*" "\Processor(*)\*" "\Processor Information(*)\*" "\Process(*)\*" "\Server\*" "\System\*" "\Server Work Queues(*)\*" "\Terminal Services\*" "\Terminal Services Session(*)\*" -si 00:00:01
    

    注意

    -max 2048 表示最大日志文件大小为 2 GB。 -si 00:00:01 表示间隔为 1 秒。 可以根据需求更改此设置。

  2. 启动数据收集器集:

    logman start CORE_%computername%
    
  3. 停止将在 c:\perflogs\Admin存储的跟踪:

    logman stop CORE_%computername%
    

远程运行性能监视器

若要设置性能监视器以监视远程系统,请打开提升的命令提示符并运行以下命令:

  1. 创建数据收集器集:

    Logman create counter <LOGNAME> -u <DOMAIN\USERNAME> * -f bincirc -v mmddhhmm -max 500 -c "\\<SERVERNAME>\LogicalDisk(*)\*" "\\<SERVERNAME>\Memory\*" "\\<SERVERNAME>\Network Interface(*)\*" "\\<SERVERNAME>\Paging File(*)\*" "\\<SERVERNAME>\PhysicalDisk(*)\*" "\\<SERVERNAME>\Process(*)\*" "\\<SERVERNAME>\Redirector\*" "\\<SERVERNAME>\Server\*" "\\<SERVERNAME>\System\*" "\\<SERVERNAME>\Terminal Services\*" "\\<SERVERNAME>\Processor(*)\*" "\\<SERVERNAME>\Cache\*" -si 00:00:02
    

    注意

    将 DOMAIN\USERNAME> 替换为<相应的用户凭据,并将 <SERVERNAME> 替换为有问题的服务器的名称。

  2. 运行以下命令启动数据收集器:

    logman start <LOGNAME>
    
  3. 服务器停止响应后,通过运行以下命令停止数据收集器:

    logman stop <LOGNAME>
    

性能监视器日志将位于 C:\PERFLOGS 文件夹中。 然后,压缩 .blg 文件,并在问题发生后将其上传到工作区。

运行性能监视器一两个工作日后,可以分析日志以查看是否存在任何模式。 哪些进程会峰值 CPU? 而且,每天或每小时的流程是否相同或不同?

根据调查结果,进一步了解后续步骤,详细了解导致 CPU 峰值的原因。 通过跟踪进程、线程、模块和函数的顺序来确定根本原因。

故障排除示例

请参阅以下示例,了解如何使用 TroubleShootingScript (TSS) 收集数据和 CpuStres 来模拟 CPU 活动。

使用 TSS

当 CPU 达到特定阈值时,TSS 可以获得较高的 CPU 使用率跟踪:

  1. 下载 TSS 并将其解压缩到 受影响计算机上的 C:\tss 文件夹。

  2. 在提升的 PowerShell 命令提示符下,从 C:\tss 文件夹中运行以下 cmdlet。

    .\TSS.ps1 -perfmon general -WaitEvent HighCPU:90 -StopWaitTimeInSec 100
    

    注意

    等待出现高 CPU 使用率问题。 CPU 使用率超过 <CpuThreshold> 后,在 settconds 的持续时间 StopWaitTimeInSec 内保留收集数据(默认值为 60)。

    以下是更多示例:

    •  .\TSS.ps1 -PerfMon General -PerfIntervalSec 5 -WaitEvent HighCPU:90
      

      PerfMon表示间隔较短的性能监视器。

    • .\TSS.ps1 -PerfMonLong SMB -PerfLongIntervalMin 11 -WaitEvent HighCPU:90
      

      PerfMonLong表示具有长间隔的性能监视器。

  3. 在新的提升的 PowerShell 命令提示符下,从 C:\tss 文件夹中运行以下 cmdlet。

    .\TSS.ps1 -Stop
    

    注意

    如果跟踪在 5 分钟后未停止,请将其停止。

TSS 支持性能监视器。 可以通过运行 .\TSS.ps1 -ListSupportedPerfCounter cmdlet 来查看详细的性能计数器名称。

通过运行 cmdlet,通过设置计数器开始捕获性能计数器 General

.\TSS.ps1 -PerfMon General

如果要更改性能日志的间隔,请使用 -PerfIntervalSec (单位为秒)或 -PerfIntervalMin (单位为分钟)。 例如, .\TSS.ps1 -PerfMon General -PerfIntervalSec 1 指定一秒的间隔。

下面是 cmdlet 的 .\TSS.ps1 -PerfMon <CounterSetName> 更多示例:

  • 使用常规计数器(CPU、内存、磁盘等)和 5 秒间隔启动性能监视器:

    .\TSS.ps1 -PerfMon General -PerfIntervalSec 5
    
  • 使用 SMB 计数器(SMB 计数器和常规计数器)和 11 分钟间隔开始性能监视器Long():

    .\TSS.ps1 PerfMonLong SMB -PerfLongIntervalMin 11
    

还可以通过性能监视器执行此操作,以在 CPU 使用率达到一定数量时开始跟踪,但它很复杂且耗时。

使用 CpuStres

可以通过运行多个线程来使用 CpuStres 模拟高 CPU 使用率活动。 跟踪 6 分钟 CPU 使用率过高问题后,性能监视器下图显示了空白,这是一个问题:

性能监视器的屏幕截图,其中显示了跟踪高 CPU 使用率问题六分钟后存在差距。

处理器 最低 最大值 平均值
处理器时间百分比 4.688% 100% 81.605%

为 Processor%ProcessorTime 添加计数器并查看实例时,会看到CPUStres64.exe消耗量最高。 在某些情况下, %处理器时间 超过 100%,在数据中达到大约 180%,表示显著峰值。

显示CPUStres64.exe是最高使用者的性能监视器的屏幕截图。

处理器时间百分比 最低 最大值 平均值
CPUSTRES64 0% 180.309% 19.787%

显示已添加计数器信息的性能监视器的屏幕截图。

检查处理器队列长度,其平均值为 > 10。 这是一个问题。 向下钻取到使用 %Processor Time 的人员。

这是性能监视器的限制。 它只能显示这么多数据。

CPU 使用率的性能计数器

有关 CPU 使用率较高的问题,请先检查任务管理器中的 CPU 使用率。 如果 CPU 利用率持续超过 85%,则表示系统面临 CPU 瓶颈。 下面是需要检查的计数器列表:

  • 处理器处理器时间百分比
  • 处理器%用户时间
  • 处理器% 特权时间
  • 处理器%中断时间
  • 系统处理器队列长度
  • 系统调用数/秒
  • 系统上下文开关/秒
  • 进程线程计数
  • 进程句柄计数

查看以下计数器,这些计数器针对不同的性能方面进行了监视:

组件 正在监视的性能方面 要监视的计数器
处理器 使用情况 处理器处理器时间 百分比(所有实例)
处理器% DPC 时间
处理器%中断时间
处理器%特权时间
处理器%用户时间
处理器 瓶颈 处理器处理器时间 百分比(所有实例)
处理器% DPC 时间
处理器%中断时间
处理器%特权时间
处理器%用户时间
处理器中断数/秒
处理器已排队的 DPC/秒
系统上下文开关/秒
系统系统调用/秒
系统处理器队列长度 (所有实例)
计数器名称 指标
处理器队列长度 (PQL) 如果每个处理器有两个或更多个实例,并且 CPU 使用率较高,请检查进程是否占用大量 CPU。 此外,请检查上下文开关% DPC 时间和 %中断时间
处理器时间百分比 0-50%:正常。
50-80%:监视/警告监视器。
80-100%:严重。 系统可能运行缓慢。
DPC 时间百分比 处理器时间> 85% 和 % DPC 时间> 15%:调查它们是否持续高于这些级别。 短峰值没问题。

例如,只有一个处理器具有 100% 处理器时间 且超过 50% DPC 时间
中断时间百分比 高 CPU 中断时间:超过 30% 的中断时间。 处理器中的大量 中断时间 可能会指示硬件或驱动程序问题。

CPU 中断时间非常高:超过 50% 的中断时间。 处理器中中断时间的百分比非常高可能表示硬件或驱动程序问题。

参考

第三方信息和解决方案免责声明

本文档中的信息和解决方案表示截至发布日期Microsoft公司的当前视图。 此解决方案可通过Microsoft或通过第三方提供商获得。 Microsoft不特别推荐本文可能介绍的任何第三方提供商或第三方解决方案。 本文可能还有其他第三方提供商或第三方解决方案未介绍。 由于Microsoft必须响应不断变化的市场状况,因此不应将此信息解释为Microsoft的承诺。 Microsoft无法保证或认可由Microsoft或任何提及的第三方提供商提供的任何信息或任何解决方案的准确性。

Microsoft不作任何保证,不包括所有表示、担保和条件,无论是明示、默示还是法定条件。 这些条件包括但不限于有关任何服务、解决方案、产品或任何其他材料或信息的陈述、担保或标题条件、不侵权、令人满意的条件、适销性和适用性。 在任何情况下,Microsoft对本文提及的任何第三方解决方案都负责。