关键词:
Windows性能监控xperfKDV1000
摘要:
Xperf是一款系统级工具,是产品套件Windows性能工具包(Windows Performance Toolkit,WPT)的一部分,而WPT则属于微软软件开发包(Microsoft Software Development Kit,SDK)。Xperf是Windows事件跟踪系统(Event Tracing for Windows,ETW)的补充。ETW则是服务器操作系统的一个内置组件,提供详细的系统性能和系统数据。
补充:WPT包含三款工具(xperf、xperfview、GPU):
Xperf:使用CMD命令行工作。包括性能监控开始,收集,和打开等。
XperfView:这是为Xperf的采样文件可视化显示的工具,可以绘制各种资源使用曲线,并用任
意方式组织数据,排序。
GPUView:不做介绍。
案例描述
我们公司有KDV1000和PCMT都是基于windows系统的,但是对于windows系统的监控工具却不多,有的工具不权威,有的工具又有他的局限性,比如工具本身的资源占用情况和监控时间等;下面我想向大家介绍xperf是如何监控系统资源。
对于KDV1000和PCMT这两款在windows下运行的产品,在编高能力级别的视频时耗用资源较高,比如KDV1000在第一路编720P/30HP,解1080P/30HP,第二路解H264/H239/SXGA@5HP时,耗用CPU竟达90%。
xperf工具有以下几个特征:
1.工具本身具有权威性,而且是免费的;
2.工具本身耗用资源少(只要是监控肯定会有资源耗用);
3.工具能长时间监控,有专业的图形分析;
4.支持命令行使用,方便结合其他脚本使用;
所以xperf是非常值得推广的。
2.1xperf安装
安装WPT之前首先安装Microsoft
.NET Framework 4。
文件请自行到网上下载。PS:注意查看系统是32位还是64位的,安装全部选择默认就可以。
2.2xperf使用
对于xperf的使用先介绍给例子:
以管理员权限打开DOS,输入以下命令:
xperf –on base
xperf –d trace.etl
xperf trace.etl
第一条命令会收集多个种类的内核事件,base是(PROC_THREAD、LOADER、DISK_IO、HARD_FAULTS、PROFILE和MEMIFO)所有内核事件的集合,并将数据记录到一个名为kernel.etl的日志文件中,这个文件一般在C盘根目录下。
第二条命令就是将内核事件收集到trace.etl这个文件中。
第三条命令就是使用xperfview这个工具将trace.etl使用图形化工具展现出来。
下面引出以下几个问题:
内核事件有哪些?
如何使用xperfview?
问题1:我们可以使用xperf –providers k获得内核事件列表,以及不同组所代表了不同内核事件的集合,内核事件列表如下文:
C:\windows\system32>xperf -providers k
Kernel Flags:
PROC_THREAD:记录进程的创建和删除
LOADER:记录内核模式和使用模式加载和卸载事件
PROFILE:捕获CPU采样的配置文件信息
CSWITCH:记录上下文切换()
COMPACT_CSWITCH:紧凑的上下文切换
DISPATCHER: CPU调度器
DPC: DPC事件
INTERRUPT:打断事件
SYSCALL:系统调用
PRIORITY:优先级变更事件
SPINLOCK:自旋锁的碰撞
ALPC:高级本地过程调用
PERF_COUNTER:进程项的性能计数器
DISK_IO: Disk I/O
DISK_IO_INIT: Disk I/O初始化
FILE_IO:文件系统操作的结束时间和结果
FILE_IO_INIT:文件操作系统(create/open/close/read/write)
HARD_FAULTS:硬件分页错误
FILENAME: FileName (e.g.,FileName create/delete/rundown)
SPLIT_IO:分裂I/O
REGISTRY:注册表的更改记录
DRIVERS:驱动事件
POWER:电源管理事件
NETWORKTRACE:网络事件(e.g., tcp/udp send/receive)
VIRT_ALLOC:虚拟分配保留和释放
MEMINFO:内存列表信息
ALL_FAULTS:所有的页面故障,包括硬上写,复制,需求零故障等
CONTMEMGEN:连续的内存生成器
POOL:跟踪池
CPU_CONFIG: NUMA拓扑结构,处理器组和处理器索引号映射。默认情况下,它始终处于启用状态。
Kernel Groups:
Base:PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+PROFILE+MEMINFO
Diag:PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSW
ITCH+PERF_COUNTER+COMPACT_CSWITCH
DiagEasy:PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSW
ITCH+PERF_COUNTER
Latency:PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+DPC+INTERRUPT+CSW
ITCH+PROFILE
FileIO:PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+FILE_IO+FILE_IO_I
NIT
IOTrace:PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+CSWITCH
ResumeTrace:PROC_THREAD+LOADER+DISK_IO+HARD_FAULTS+PROFILE+POWER
SysProf:PROC_THREAD+LOADER+PROFILE
Network:PROC_THREAD+LOADER+NETWORKTRACE
总结:收集内核事件的通用命令公式如下:
Xperf -on [Kernel Flags| Kernel Groups]+ [KernelFlags| Kernel Groups]+…
问题2:如何使用xperfview
你可以使用命令将xperfview打开也可以直接找到程序安装目录将其打开。(直接在cmd中直接输入xperfview)
打开你保存好的etl文件,如下图:
这三个图分别是CPU使用率,进程的CPU使用率,线程的CPU使用率随着时间的变化而变化的趋势图,那么我们可以对上图进行如下操作:
1.在图上点击右键选择Summary Table查看CPU使用列表详情。
备注:硬盘读写速度不是很好的话,建议大家使用Simple Summary Table。
打开的列表详情包含了在监控性能的这段时间内整个系统的平均cpu使用率以及每个进程使用的平均CPU率以及改进程下调用模块的CPU使用率。
2.我们还可以对相应的曲线进行配色如图,只需双击下图的CPU#中的CPU 0,就会弹出Color框,点击相应的颜色后即可:
3.可以通过拉选范围对图形的局部进行分析可以做如下操作:放大选择范围,克隆选择范围,放弃放大,全选,选择指定范围
4.选择指定显示的参数如下图,只显示4核CPU中的CPU1和CPU3
5.选择任意两张图表合并对比,这样就能相互联系的看待问题;
Step1:右击图表,选择Overlay Graph然后选择需要合并的父项及子项。
Step2:合并后如下图所示:
2.3xperf使用中遇到的问题
Q1:Xperf支持的操作系统:
支持WINDOWS
VISTA, Windows Server 2008以及更高的操作系统,由于历史遗留问题,WINDOWS XP和WINDOWS Server 2003对WPT的支持不好,内核在开发的时候没有考虑到未来的程序性能调试的复杂度,所以xperf不支持WINDOWS XP和WINDOWS Server 2003。
Q2:Xperf收集数据时,一定要注意文件大小,而且读etl文件时对硬盘的读写速度要求也比较高,综合以上,实践中得出的建议监控时间为1小时,那很多时候拷机项的时间都是好几个小时的,这时候我们可以通过批处理来完成连续监控,且每个文件都收集1小时的,然而批处理没有sleep的用法,但这也很容易解决我们可以在批处理中调用VBS,VBS文件中简单的写上一句WScript.Sleep 3600即可。
Q3:由于数据收集你的硬盘也很有可能会爆,所以在监控之前先预估下硬盘大小是否支持。
使用Xperf工具很专业的解决了我们PCMT以及KDV1000的CPU监控需求,为我们基于WINDOWS上的终端提供了保障。
难能可贵的是该工具的权威性,专业性,稳定性还有它是免费的。所以很希望推荐大家使用这款工具。