一、概述
Windows 性能工具包包含各种性能监控工具,这些工具可生成有关 Windows 操作系统和应用程序的详细性能概况。 其核心为两个独立工具:Windows Performance Recorder (WPR) 和 Windows Performance Analyzer (WPA)。
简单理解WPR 就是一个“抓包”工具,用来抓取系统的事件信息。
而WPA就是将抓取的信息以图表的形式展示出来便于我们详细分析的工具。WPA分析WPR生成的.ETL文件(Event Trace Log)。
操作系统要求:Win8以上
下面几个bug:
- 加载符号时,符号列可能会过时:堆栈标记、帧标记、Syscall 中的函数, 为了解决此问题,请先加载符号,然后再与表交互。
- 符号加载进度可能显示为挂起或停滞,但符号会继续加载。
- 区域表不能自动添加字段列。 可以通过视图编辑器手动添加这些列。
WPT下载地址.
下拉找到对应系统的软件版本进行下载。安装一直下一步就行,注意Windows Performance ToolKit打勾就行。
二、 关键词理解:事件跟踪(ETW)
ETW 支持对内核和应用程序事件进行一致、直接的捕获。 可以随时启用或禁用事件捕获,而无需重新启动系统或进程。 Windows 性能分析器 (WPA) 呈现 ETW 在一组易于理解的图形和表中收集的信息。
可以捕获并呈现所选事件以非侵入性的方式标识并诊断系统和应用程序性能问题。 可以动态启用或禁用事件跟踪。 Windows Performance Recorder (WPR) 使用 ETW 收集和组织关键系统信息。 WPR 充当会话控制器,启动和停止会话,并选择要记录的 ETW 事件。
WPA 使用所有事件提供程序在 ETW 会话中生成的事件跟踪日志 (ETL) 文件。 内核和应用程序事件可以提供有关系统操作的大量详细信息。 几乎每个影响整体系统性能的内核事件都已定义,并且可用于 WPA。
三、 WPR使用步骤
Windows 性能记录器(WPR)以用户界面(UI)的形式供用户使用,其步骤如下:
步骤1:开始录制
在“开始”屏幕上,单击“Windows 性能记录器”。
若要运行默认配置文件,请单击“启动”。
若要了解如何查看和使用其他配置文件,请参阅开始录制。
单击“开始”开始录制,或单击“取消”结束而不录制。
点击上图左下角的”Add Profiles…”按钮可通过后缀为.wprp格式文件进行参数记录配置的导入,其格式为xml,用记事本打开可进行编辑。
步骤2:停止录制
在“WPR”屏幕上,单击“保存”。如果单击“取消”,则不会保存任何数据。
浏览到要将录制文件保存到的位置。
输入您为其创建录制文件的问题的描述。
单击“保存”,然后单击“确定”。
四、WPA使用步骤:
打开上一步生成的…\DESKTOP-DM6BBPG.04-15-2022.11-25-57.etl文件,或点击WPA界面的“Open In WPA”按钮启动WPA界面如下图:
步骤1:添加符号路径,并加载符号
步骤2:点击想要左侧内容浏览器中想分析的内容进行展开。
a.系统活动性(SystemActivity)分析简述:
SystemActivity分支下展开如下:
双击Process图标,展开系统活动性中进程时间线分析窗口
注意到此处有两种进程,一种是Permanent(持续的),另一种是Transient(短暂的),我们打开这个短暂的分支,观察下PostGres.exe 这个进程。点击搜索按钮,输入进程名,点击过滤到输入则可以仅显示符合条件项。.
同样,我们对线程生命线进行分析。
b.分页内存池泄漏分析简述
之前遇到过一次分页内存池泄漏的流程,下面对定位方法进行简单介绍。
1、单击内存分支,展开所有子分支(紫色背景)。
2、双击Pool Graphs将其添加到分析标签页。默认显示均为上图下表形式。为了观察调用栈,需在设置中添加该列。
注: Windows NT把内核模式地址空间分成分页内存池和非分页内存池。(用户模式地址空间总是分页的) 必须驻留的代码和数据放在非分页池;不必常驻的代码和数据放在分页池中。Windows NT为决定代码和数据是否需要驻留非分页池提供了一个简单规则。非分页内容的空间是很小的,所以一般的东西都会放入分页内存中。 |
---|
3、按Size列进行排序,可定位到占内存高的池标签。依次展开栈帧可进行详细定位(加载符号文件的前提下。
c.对堆内存进行分析,需要操作WPR和注册表
1、WPR中选择heap usage
2、管理员运行cmd执行以下命令(标红项为进程名,本例为_MemoryLeak_.exe):
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ < process_name > " /v TracingFlags /t REG_DWORD /d 1 /f
需要注意如果要进行长时间的堆栈记录,则需要在WPR.exe中把其他无关项取消勾选,因为记录项越多相同时间生成的记录文件越大。
3、定位结果如下图。
四、可能的故障-丢失事件
在 Windows 性能记录器 (WPR) 中,某些应用程序生成的事件过多,以至于 Windows 事件跟踪 (ETW) 无法跟上日志记录频率。此问题表现为录制文件中丢失的事件。由于数据不完整,该问题可能导致分析困难或错误结论。
注意:默认情况下,WPR 将分页内存用于缓冲区。若要将 WPR 设置为对缓冲区使用非分页内存,请将提供程序的“非分页内存”属性设置为 true。
可以通过以下方式帮助防止 WPR 丢失 ETW 缓冲区或事件:
- 使用较大的缓冲区可在 WPR 将缓冲区写入磁盘时实现更高效的磁盘 I/O。 首次在计算机上使用特定缓冲区配置时对数据收集的请求进行计数。
- 使用命令行记录TempTo选项记录到与默认值不同的位置。 增加缓冲区的数量。 简化正在测试的方案,或选择较少的配置文件。
- 释放系统驱动器上的磁盘空间。
- 使用先进的硬件来收集数据;例如,使用具有较高吞吐量的磁盘子系统。这是要考虑的最后一个选项。通常,可以通过仔细选择要启用的提供程序和要使用的缓冲区来避免丢失事件。
注意右下角记录模式尽量选择内存而不要选文件,系统内存16G则存16G最多就停止了,而文件是根据磁盘容量限制,很可能存几百G。
五、比较分析视图(新特性)
这个特性可以用来分析某个软件运行前后对系统的影响。分析系统性能时,定期创建可用于识别回归源的跟踪非常有用。 例如,可以在安装操作系统后立即创建基线跟踪。 稍后,在安装其他应用程序、驱动程序或硬件后,可以创建另一个跟踪并确定更改如何影响系统性能。
以前在 WPA 中,每个选项卡只包含有关一个跟踪的信息。 若要比较两个跟踪,需要在选项卡之间来回切换,或在单独的 WPA 实例中打开每个跟踪。
现在,可以通过创建比较分析视图来比较两个跟踪的结果。借助此视图,通过突出显示跟踪之间的差异,可以轻松识别性能受到负面影响的区域。
在比较分析视图中,WPA 创建一个比较表,其中包含两个跟踪之间的值差异。一个跟踪被指定为基线跟踪,通常是在进行硬件或软件更改之前捕获的跟踪。另一个跟踪称为比较跟踪,即在进行系统更改后捕获的跟踪。
WPA 创建的表包含基线跟踪和比较跟踪之间的值差异(比较值-基线值)。如果比较跟踪中的指标较高,则差异显示为正数。 如果基线跟踪中的计数较高,则差异显示为负数。
本文主要是参考官方文档对自己亲身使用的简单总结,WPT功能很强大系统学习还是参考官方文档为佳品。
https://docs.microsoft.com/zh-cn/windows-hardware/test/wpt/windows-performance-toolkit-technical-reference