可以使用ETW(Windows事件跟踪)来收集内存统计信息吗?

时间:2012-05-31 22:45:31

标签: performance memory etw xperf

是否可以使用ETW获取所有进程和系统的内存统计信息? 记忆统计我的意思是:例如委托字节,专用字节,分页池,工作集,......

我找不到任何关于使用xperf获取和查看内存统计信息的信息。它总是关于CPU,磁盘,网络。

有人可能会使用性能计数器来获取这类信息,但如何在一个图表中以图形方式叠加统计信息(如何关联/同步时间戳)?

2 个答案:

答案 0 :(得分:6)

Windows 8.1及更高版本的最佳选择是Microsoft-Windows-Kernel-Memory提供程序,它每0.5秒记录一次进程内存信息。有关详细信息,请参阅https://github.com/google/UIforETW/issues/80。 UIforETW默认情况下在可用时启用它。

您也可以试试MEMINFO提供商。它提供了系统范围内存压力的概述。它显示了活动列表(当前正在使用的内存中),待机列表(当前未使用的“有用”页面,例如磁盘缓存),以及零和空闲列表(真正的可用内存)。这至少可以让你判断一个系统是否内存不足。

您也可以尝试MEMINFO_WS和CONTMEMGEN,但这些都没有记录,所以我真的不知道他们做了什么。它们出现在xperf -providers中,但当我用它们录制时,我看不到任何新的图形。显然,微软提供这些提供商但无法查看它们。叹息...

如果您想在Windows 7上获得更多内存详细信息 - 例如每个进程的工作集 - 最好的办法是让一个进程运行,定期查询这些数据并在自定义ETW事件中发出。这在UIforETW中以预先打包的形式提供,它可以每秒查询一组指定进程的工作集。有关如何获取UIforETW,请参阅公告帖子: https://randomascii.wordpress.com/2015/04/14/uiforetw-windows-performance-made-easier/

UIforETW的Windows 7工作集数据显示在任务名称== WorkingSet下的通用事件中。在Windows 8.1上,OS工作集数据(更详细,更有效地记录)显示在Memory->下。虚拟内存快照。

答案 1 :(得分:2)

您可以使用ReferenceSet内核组跟踪内存使用情况。它包括以下traceflags:

PROC_THREAD+LOADER+HARD_FAULTS+MEMORY+FOOTPRINT+VIRT_ALLOC+MEMINFO+VAMAP+SESSION+REFSET+MEMINFO_WS

MEMORY =内存追踪

FOOTPRINT + REFSET =支持足迹分析

MEMINFO =内存列表信息(您从ResMon看到的活动,待机和其他人)

VIRT_ALLOC =虚拟分配储备和释放

VAMAP =映射文件信息

MEMINFO_WS =工作集信息

正如你所看到的,当你起诉正确的旗帜时,xperf可以捕获大量的内存数据。

相关问题