性能计数器检查内存泄漏(Perfmon counters to check memory leak)

2019-08-03 00:07发布

我要检查内存泄漏问题,在我的服务。 我曾尝试下面的一组性能计数器的。

  1. 在所有堆.NET CLR内存\#字节
  2. .NET CLR内存\ Gen 2的堆大小
  3. .NET CLR内存\#GC手柄
  4. 固定的对象的.NET CLR内存\#
  5. .NET CLR内存\#总承诺字节
  6. .NET CLR内存\#总保留字节
  7. .NET CLR内存\大对象堆大小

上面我已经从集合提到这里

也称为下面的一组:

  1. 内存/可用字节
  2. 内存/提交字节
  3. 过程/专用字节
  4. 过程/页文件字节
  5. 过程/句柄计数

上面我已经从集合提到这里

是否有任何参数/标准或识别内存泄漏的perfmon计数器任何其他最好的方法?
任何一个可以建议我设置柜台,检查内存泄漏? 以上套涵盖内存泄漏?

Answer 1:

要使用性能监视器检测内存泄漏,监视这些计数器:

  1. 内存/可用的字节数计数器,您可以查看可用内存的字节总数。 该值通常波动,但如果你有内存泄漏的应用程序,它会随时间而减少。
  2. TheMemory /提交字节计数器将稳步上升,如果内存泄漏发生,因为作为可用内存的字节数减少时,提交的字节的数量增加。
  3. 进程/专用字节计数器显示专用于一个特定的进程保留的字节数。 如果一个内存泄漏发生时,该值将趋于稳步上升。
  4. 进程/页文件字节计数器显示页面文件的大小。 Windows使用虚拟内存(页面文件),以补充机器的物理内存。 作为机器的物理内存开始填充起来,内存页面被移动到页面文件。 这是正常的,甚至在用大量的内存的机器上使用的页面文件。 但是,如果页面文件的大小逐步增大,这是一个内存泄漏发生一个好兆头。
  5. 我也想提一提进程/句柄计数计数器。 应用程序使用的手柄,以确定他们必须访问的资源。 如果一个内存泄漏发生时,应用程序通常会产生额外的手柄来识别内存资源。 所以在手柄计数上升可能表示内存泄漏。 然而,并非所有的内存泄漏将导致句柄计数上升。

资源

根据我的经验,这是准确的。

我也想请您看看苔丝,微软的一名员工这个微软高级调试博客。 谁提出了以下计数器。 我发现上面比足以表明内存泄漏存在更多,但我相信,苔丝的说明,可能会提供更深入的洞察问题。

调试演示-记忆审查

  • .NET CLR内存/在所有堆#字节
  • .NET CLR内存/大对象堆大小
  • .NET CLR内存/ Gen 2的堆大小
  • .NET CLR内存/ 1个堆大小
  • .NET CLR内存/根0堆大小
  • 过程/专用字节
  • 流程/虚拟字节


Answer 2:

有可进行内存泄漏测试更容易,如更好的工具展鹏蚂蚁内存分析器和JetBrains公司dotMemory探查 。

但是,如果你想使用性能计数器, 本文介绍了如何使用性能计数器来测试内存泄漏。

请记住,没有垃圾收集某些情况下脱手后立即释放内存。 它已被优化的触发,只有当存在内存压力释放内存。 所以,如果你想测试内存泄漏你把计数器读数之前,您应该手动执行垃圾收集。

GC.Collect();
GC.WaitForPendingFinalizers();



文章来源: Perfmon counters to check memory leak