是否可以使用 ETW 来获取所有进程和系统的内存统计信息?
对于内存统计,我的意思是:例如提交的字节,私有(private)字节,分页池,工作集,...
我找不到任何有关使用 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 下。
关于performance - 是否可以使用 ETW(Windows 事件跟踪)来收集内存统计信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10842281/