我要检查内存泄漏问题,在我的服务。 我曾尝试下面的一组性能计数器的。
- 在所有堆.NET CLR内存\#字节
- .NET CLR内存\ Gen 2的堆大小
- .NET CLR内存\#GC手柄
- 固定的对象的.NET CLR内存\#
- .NET CLR内存\#总承诺字节
- .NET CLR内存\#总保留字节
- .NET CLR内存\大对象堆大小
上面我已经从集合提到这里
也称为下面的一组:
- 内存/可用字节
- 内存/提交字节
- 过程/专用字节
- 过程/页文件字节
- 过程/句柄计数
上面我已经从集合提到这里
是否有任何参数/标准或识别内存泄漏的perfmon计数器任何其他最好的方法?
任何一个可以建议我设置柜台,检查内存泄漏? 以上套涵盖内存泄漏?
要使用性能监视器检测内存泄漏,监视这些计数器:
- 内存/可用的字节数计数器,您可以查看可用内存的字节总数。 该值通常波动,但如果你有内存泄漏的应用程序,它会随时间而减少。
- TheMemory /提交字节计数器将稳步上升,如果内存泄漏发生,因为作为可用内存的字节数减少时,提交的字节的数量增加。
- 进程/专用字节计数器显示专用于一个特定的进程保留的字节数。 如果一个内存泄漏发生时,该值将趋于稳步上升。
- 进程/页文件字节计数器显示页面文件的大小。 Windows使用虚拟内存(页面文件),以补充机器的物理内存。 作为机器的物理内存开始填充起来,内存页面被移动到页面文件。 这是正常的,甚至在用大量的内存的机器上使用的页面文件。 但是,如果页面文件的大小逐步增大,这是一个内存泄漏发生一个好兆头。
- 我也想提一提进程/句柄计数计数器。 应用程序使用的手柄,以确定他们必须访问的资源。 如果一个内存泄漏发生时,应用程序通常会产生额外的手柄来识别内存资源。 所以在手柄计数上升可能表示内存泄漏。 然而,并非所有的内存泄漏将导致句柄计数上升。
资源
根据我的经验,这是准确的。
我也想请您看看苔丝,微软的一名员工这个微软高级调试博客。 谁提出了以下计数器。 我发现上面比足以表明内存泄漏存在更多,但我相信,苔丝的说明,可能会提供更深入的洞察问题。
调试演示-记忆审查
- .NET CLR内存/在所有堆#字节
- .NET CLR内存/大对象堆大小
- .NET CLR内存/ Gen 2的堆大小
- .NET CLR内存/ 1个堆大小
- .NET CLR内存/根0堆大小
- 过程/专用字节
- 流程/虚拟字节
有可进行内存泄漏测试更容易,如更好的工具展鹏蚂蚁内存分析器和JetBrains公司dotMemory探查 。
但是,如果你想使用性能计数器, 本文介绍了如何使用性能计数器来测试内存泄漏。
请记住,没有垃圾收集某些情况下脱手后立即释放内存。 它已被优化的触发,只有当存在内存压力释放内存。 所以,如果你想测试内存泄漏你把计数器读数之前,您应该手动执行垃圾收集。
GC.Collect();
GC.WaitForPendingFinalizers();