是否可以使用 ETW 来获取所有进程和系统的内存统计信息?对于内存统计,我的意思是:例如提交字节、私有字节、分页池、工作集、...
我找不到任何有关使用 xperf 获取和查看内存统计信息的信息。它总是与 CPU、磁盘、网络有关。
可能会使用性能计数器来获取此类信息,但是如何在一个图表中以图形方式覆盖统计信息(如何关联/同步时间戳)?
是否可以使用 ETW 来获取所有进程和系统的内存统计信息?对于内存统计,我的意思是:例如提交字节、私有字节、分页池、工作集、...
我找不到任何有关使用 xperf 获取和查看内存统计信息的信息。它总是与 CPU、磁盘、网络有关。
可能会使用性能计数器来获取此类信息,但是如何在一个图表中以图形方式覆盖统计信息(如何关联/同步时间戳)?
在 Windows 8.1 及更高版本上最好的选择是 Microsoft-Windows-Kernel-Memory 提供程序,它每 0.5 秒记录一次每个进程的内存信息。有关详细信息,请参阅https://github.com/google/UIforETW/issues/80。UIforETW 在可用时默认启用此功能。
您也可以尝试 MEMINFO 提供程序。它提供了内存压力的系统范围概述。它显示活动列表(当前正在使用的内存)、备用列表(当前未使用的“有用”页面,例如磁盘缓存),以及零和空闲列表(真正空闲的内存)。这至少可以让您判断系统是否内存不足。
您也可以尝试 MEMINFO_WS 和 CONTMEMGEN,但这些都没有记录,所以我真的不知道他们做了什么。它们出现在 xperf -providers k 中,但是当我用它们录制时,我看不到任何新的图表出现。显然,Microsoft 提供了这些提供程序,但无法查看它们。叹...
如果您想要 Windows 7 上的更多内存详细信息(例如每个进程的工作集),最好的办法是运行一个进程,该进程定期查询此数据并在自定义 ETW 事件中发出它。这在 UIforETW 中以预先打包的形式提供,可以每秒查询一次指定进程集的工作集。关于如何获得 UIforETW,请参阅公告帖子: https ://randomascii.wordpress.com/2015/04/14/uiforetw-windows-performance-made-easier/
UIforETW 的 Windows 7 工作集数据显示在任务名称 == 工作集下的通用事件中。在 Windows 8.1 上,操作系统工作集数据(更详细、更有效地记录)显示在 Memory-> Virtual Memory Snapshots 下。
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 可以捕获大量内存数据。