PC性能监测工具,您不可或缺的好帮手~~
前言
在计算机使用过程中,常有人会问:为什么我的CPU利用率接近100%?为什么可用内存不断减少?
幸运的是,Windows性能工具包为我们提供了帮助。是什么应用程序的锅,我们使用该性能工具一探究竟。
一、 Windows性能工具包简介
(1) Windows性能工具包(Windows Performance Toolkit,简称WPT)有两个主要组件:Windows Performance Recorder(WPR)和Windows Performance Analyzer(WPA);
(2) WPR用来追踪CPU使用率、磁盘I/O、文件、网络、GPU活动、电源使用情况等,借助ETW技术框架实现,将以上信息保存在ETL文件中;
(3) WPA辅助WPR使用,用来可视化分析ETL文件,从而确定系统性能瓶颈。
二、Windows性能工具包安装
2.1 下载
下载安装Windows ADK得到 Windows 性能工具包 (WPT),https://docs.microsoft.com/en-us/archive/blogs/pigscanfly/xperf-a-new-tool-in-the-windows-sdk
2.2 安装
(1) 默认安装路径:C:Program Files (x86)Windows Kits8.1WindowsPerformance Toolkit
(2) 安装文件:
(3) 文件简介
wpa.exe —解析ETL文件,并图形化、表格化展示。
wpaexporter.exe —导出ETL文件的解析结果成文本格式。
wpr.exe —记录ETW产生的数据,命令行模式。
WPRUI.exe —记录ETW产生的数据,图形化界面,更友好。
xperf.exe —早期版本WPT的核心组件,所以现在习惯将WPT称为XPerf。XPerf的功能类似于wpr+wpaexporter,可以记录ETW产生的数据,也可以导出结果到文本。
xperfview.exe —早期版本WPT中的分析工具,功能和现在的WPA一样,WPT从版本8以后已经没有这个exe了。在WinXP上只能使用旧版的XPerf,而且建议用对应的xperfview打开分析。
三、Windows性能工具包工作原理
3.1 WPR工作原理——ETW技术框架
CONTROLLERS:启动和停止Events发送,以及log路径和大小设置,以及Provider的选择允许;WPR就是一个Controllers,它会使用StartTrace等API来开启信息追踪。
PROVIDERS:不同类型的Event产生者。例如线程、网络、I/O、CPU、内存等各种Provider,它会使用WriteEvent来记录信息。
CONSUMERS:已产生Event的使用者;WPA就是使用者,用来做可视化分析,它会解析logfile以获取结果。
3.2 WPA工作原理——DataTable
Key area:用这一组维度数据作为统计关键字,通常需要正确搭配,例如Process可以搭配Thread。
Data area:数据统计区,这里可以是消耗时间costtime、次数等。
Graphing element area:绘制区,这里可以是时间间隔duringtime、权重占比Weight等。
四、Windows性能工具实例分析
4.1 WPR追踪获取信息
4.1.1 WPR命令简介
WPR的使用是通过命令行的形式来完成的。常见的命令如下:
-start [SessionName]:需要启动的Session Name,只记录kernel logging的话Name可以为空
-on Flags|Groups:指定需要开启的provider flags or groups,通过加号(+)分隔
-f filename:指定写入的文件名字,Kernel trace默认是Kernel.etl, user trace默认是User.etl
-maxfile Size:限定日志文件的大小,单位MB
-filemode Mode:指定文件写入模式,默认是"Sequential",还有"Circular", "Append","NewFile"
-stackwalk flags|@file:开启call stack的记录
4.1.2 生成ETL文件
使用xperf-on DiagEasy开始收集系统性能信息;
使用xperf -d test.etl停止收集并将收集到的信息保存到etl文件中。
4.2 WPA分析获取结果
4.2.1 WPA分析界面简介
整体界面展示
双击生成的etl文件,可以看到WAP分析工具有6部分内容,分别是图像分析区(GraphExplorer)、时间轴、诊断输出台(Diagnostics Console)、分析区(Analysis)、详细资料展示区(Details)及顶部工具栏,如下图:
图像展示区(GraphExplorer)
图像分析区主要是结果的管理区,可以看到每个项目有对应的下拉小三角,点击小三角,我们就可以看到每个项目下具体的结果展示。
System Activity:系统活动,里面主要是进程线程的生命周期,原始事件等等内容;
Computation:记录了CPU的各项活动;
Storage:记录了磁盘的活动和文件的操作;
Memory:记录了系统内存的变化。
分析区(Analysis)
分析区主要展示了具体的分析结果,包括主要的Series(进程序列)、性能折线图、具体各项分析的tab表。以CPU为例,双击CPU,就可以得到分析结果。
时间轴
时间轴是和Analysis相关联的,展示的是分析性能的时间line。一般情况下只显示一个时间轴,如果有多个不同时间段的Analysis,则会展示多个时间轴。
诊断输出台(DiagnosticsConsole)
和一般的控制台类似,主要是输出一些错误信息与log。
顶部工具栏
顶部工具栏主要是打开文件(File)、跟踪调试(Trace)、窗口创建(Window)及帮助(Help)。常用的为跟踪调试中配置加载符号文件(Symbol)。
4.2.2 WPA分析性能结果
分析性能结果主要是第一部分介绍的图像分析区(Graph Explorer)和分析区(Analysis),以CPU为例进行分析。
STEP-1:展开Graph Explorer的Computation,双击CPU,可以看到如下图:
STEP-2:选择不同的展现形式
如果要看进程的CPU信息,则标签序列、底部tab都是以进程展示的,下拉选择最后一项:
如果要看每个CPU处理器的信息,则选择倒数第二项:
展开可看到每个CPU下的不同的进程信息:
STEP-3:选择好具体要展现的形式之后,我们选择需要的图表展示
默认选择的是折线图,可以更改其他类型的图表展示方式,具体视情况而定 :
STEP-4:选择需要展示的内容
在Analysis分析区,我们可以选择展示的内容,比如只想看图表变化图、tab分析表和图表变化图、只看tab分析表等,如下图:
注:一般建议使用图形加tab表,可以帮助更好的分析结果。
STEP-5:分析结果
以SogouExplorer.exe为例,我们想看在统计周期内的CPU变化情况,就可以找到对应的标签颜色,分析折线图,如下图:
我们想看在统计周期内,进程总共占用多少资源,可以在tab表中找到是SogouExplorer.exe进程的,将所有的CPU资源占用情况求和:
五、踩过的坑
WPR的启动、配置、解析有很多参数,不是很容易上手,这里说下几个踩过的坑。
(1) 版本问题
目前能下载到的版本有4.8 /6.3 /10.0,这几个版本的兼容性并不是很好,生成ETL文件后,一定注意要用同版本的WPR、WPA或是XPerfView去分析,用不同版本的话会有一些奇怪的问题,例如打开报错、看不到关键数据、闪退等。
(2) 工具兼容性问题
如果你正在使用ProcessMonitor或ProcessExplorer,需要先关闭它们再启动WPR,否则会报错,因为这两个工具也会通过ETW收集信息。
(3) 参数问题
WPR的启动参数很多,开的越多带来的额外系统开销也越多,ETL文件也越大。所以一定要按需配置,有针对性的开启需要的Provider。
- 扩展Yarn资源模型详解1
- hdu-------(1848)Fibonacci again and again(sg函数版的尼姆博弈)
- go语言实现将重要数据写入图片中
- poj-----(2528)Mayor's posters(线段树区间更新及区间统计+离散化)
- poj---(2886)Who Gets the Most Candies?(线段树+数论)
- Hadoop3.0通用版集群安装高可靠详细教程
- Hadoop3.0集群安装知识
- 分布式消息队列 RocketMQ 源码分析 —— Message 顺序发送与消费
- 深入解析快速排序算法的原理及其Go语言版实现
- Hadoop3.0: YARN Resource配置说明
- GO语言利用K近邻算法实现小说鉴黄
- Why Spring Boot
- 如何使用HammerDB进行MySQL基准测试
- 一个不可思议的MySQL慢查分析与解决
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- MATP ManyTask Multitask Problem 和 Solution 的变量范围
- Sinopia安装部署
- Nginx的405 not allowed错误解决
- Linux免密登陆
- 一起来学matlab-matlab学习笔记8 基本绘图命令_2基本绘图操作
- 用一个图书库实例搞懂二分搜索树的底层原理
- 自已做动画及编写程序搞清楚最大堆的实现原理
- 一起来学演化计算-matlab基本函数strcmp num2str 字符串格式
- 一起来学matlab-matlab学习笔记8 基本绘图命令_1 图形窗口简介
- 根据barcode过滤bam文件
- biopython - 比较两个序列的相似性
- 使用阿里函数计算同步OSS增量对象到COS
- GitLab定时备份及恢复
- MySQL 的B+树索引.
- Spring全家桶的深入学习(一):Spring起步