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

7

使用ETW是否可以获取所有进程和系统的内存统计信息?内存统计信息包括:已提交字节,私有字节,分页池,工作集等等。

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

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

2个回答

8
你在Windows 8.1及以上版本中的最佳选择是Microsoft-Windows-Kernel-Memory提供程序,它每0.5秒记录一次每个进程的内存信息。详情请参见https://github.com/google/UIforETW/issues/80。可用时,UIforETW将默认启用该选项。
你还可以尝试使用MEMINFO提供程序。它提供了系统范围内的内存压力概述。它显示活动列表(当前正在使用的内存),备用列表(当前未使用的“有用”页面,例如磁盘缓存),以及零和空闲列表(真正的空闲内存)。这至少可以让你知道系统是否已经耗尽了内存。
你还可以尝试使用MEMINFO_WS和CONTMEMGEN,但这些都是未记录的,所以我真的不知道它们的作用。它们出现在xperf-providers k中,但当我使用它们进行记录时,我看不到任何新图形出现。显然,微软提供了这些提供者,但没有查看它们的方法。唉。。。
如果你想在Windows 7上获取更多内存详细信息,例如每个进程的工作集,请运行一个周期性查询此数据并将其发出为自定义ETW事件的进程。这在UIforETW的预打包形式中可用,它可以每秒查询一次指定进程集的工作集。有关如何获取UIforETW,请参见公告帖子: https://randomascii.wordpress.com/2015/04/14/uiforetw-windows-performance-made-easier/ 在Windows 7中,UIforETW的工作集数据显示为通用事件,任务名称为WorkingSet。在Windows 8.1中,操作系统的工作集数据(更详细,更高效地记录)显示为内存->虚拟内存快照。

2
您可以使用ReferenceSet内核组来跟踪内存使用情况。它包括以下跟踪标志:
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可以捕获大量的内存数据。


1
是的,它可以捕获大量数据,但我们如何将其显示出来或以其他方式提取它?特别是我找不到任何方法来显示MEMINFO_WS数据。在WPA的内存部分中,我可以看到内存利用率(活动/修改等列表),硬错误,VirtualAlloc Comit生命周期,池图形和常驻集。 常驻集似乎最有用,但它似乎正在显示REFSET信息,那么谁会显示MEMINFO_WS数据呢? - Bruce Dawson
1
居住集合似乎仅在跟踪结束时抓取快照,因此对于注意到跟踪过程中的趋势来说很差。我认为我/我们真的需要MEMINFO_WS数据。 - Bruce Dawson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接