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

标签 performance memory etw xperf

是否可以使用 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/

相关文章:

udp - WPA 显示 NIC 驱动程序 DPC 片段运行了 232 毫秒

profiling - 从 GCSampledObjectAllocationHigh 转换 TypeId

c# - 使用EventFlow监控本地机器上的ETW事件

c++ - 堆分配对象的 setter

php - 什么是用于临时/旋转存储的最佳/最快的 MySQL 表模式,例如用于 session 管理?

sql-server - SQLServer 中子字符串与右左组合的相对性能

javascript - 如何防止我的桌面网站上的图像加载到移动设备上?

c++ - 哪个更快 : Assigning same value to a variable, 或找出它是否已经设置?

java - SWT的虚拟表是否释放TableItems

Java 从列表中提取值并将其作为列名包含在 SQL 查询中