使用 perfmon 确定是否存在内存泄漏

如果 Windows 性能随着时间的推移而下降,并且您怀疑可能涉及内存泄漏,请使用 Windows 性能监视器调查是否存在内存泄漏。 此过程不会告诉您泄漏的来源是什么,也不会告诉您泄漏是用户模式还是内核模式。

首先启动性能监视器。 若要打开性能监视器,请使用以下过程之一:

  • 打开“开始”菜单,搜索“性能监视器”,然后单击结果
  • 使用 Windows Key + R 键盘快捷方式打开运行命令,键入 perfmon,并单击“确定”以打开。

添加计数器

打开性能监视器后,将以下计数器添加到主性能监视器图中。 右键单击监视工具下的性能监视器,然后选择属性

  • 内存-->Pool Nonpaged Bytes

  • 内存-->池分页字节

  • 分页文件-->% 使用情况

设置持续时间以捕获足够的活动

要捕获随时间变化的泄漏图,请将采样间隔时间设置为 600 秒,以每十分钟测量一次值。 设置持续时间以捕获足够的活动。 例如,若要将其设置为 24 小时,该值为 60*60*24 = 86,400。可能还需要将数据记录到文件以供以后检查。

启动应用程序和监视器

启动你认为导致泄漏的应用程序或测试。 允许应用程序或测试在一段时间内不受干扰地运行;在此期间不要使用目标计算机。 泄漏通常很慢,可能需要几个小时才能检测到。 等待几个小时后再判断是否发生了泄漏。

监视性能监视器计数器。 测试启动后,计数器值将迅速变化,内存池值可能需要一些时间才能达到稳定状态。

用户模式内存泄漏始终位于可分页池中,并导致池分页字节计数器和页面文件使用情况计数器随时间推移稳步增加。 内核模式内存泄漏通常会耗尽非分页池,导致池非分页字节计数器增加,尽管可分页内存也会受到影响。 有时,这些计数器可能会显示误报,因为应用程序正在缓存数据。