Performance 用于检查内存泄漏的Perfmon计数器
Performance 用于检查内存泄漏的Perfmon计数器,performance,memory-leaks,performancecounter,perfmon,memory-leak-detector,Performance,Memory Leaks,Performancecounter,Perfmon,Memory Leak Detector,我想检查我的服务中的内存泄漏问题。我尝试了以下一组性能计数器
所有堆中的.NET CLR内存\#字节
.NET CLR内存\Gen 2堆大小
.NET CLR内存\#GC句柄
固定对象的.NET CLR内存\#
.NET CLR内存\#提交的总字节数
.NET CLR内存\#总保留字节数
.NET CLR内存\大对象堆大小
我是从一开始就提到这一套的
也指以下一套:
内存/可用字节
内存/提交字节
进程/专用字节
进程/页面文件字节
进程/句柄计数
我是从一开始就提到这一套的
是否有任何参数/标
我想检查我的服务中的内存泄漏问题。我尝试了以下一组性能计数器
所有堆中的.NET CLR内存\#字节
.NET CLR内存\Gen 2堆大小
.NET CLR内存\#GC句柄
固定对象的.NET CLR内存\#
.NET CLR内存\#提交的总字节数
.NET CLR内存\#总保留字节数
.NET CLR内存\大对象堆大小
我是从一开始就提到这一套的
也指以下一套:
内存/可用字节
内存/提交字节
进程/专用字节
进程/页面文件字节
进程/句柄计数
我是从一开始就提到这一套的
是否有任何参数/标准或任何其他最佳方法来识别内存泄漏的性能计数器?
有人能给我推荐一套计数器来检查内存泄漏吗?或以上设置覆盖内存泄漏?要使用性能监视器检测内存泄漏,请监视以下计数器:
内存/可用字节计数器用于查看可用内存的总字节数。该值通常会波动,但如果
您有一个内存泄漏的应用程序,它将随着时间的推移而减少
时间
如果发生内存泄漏,memory/Committed Bytes计数器将稳步上升,因为
内存减少,提交的字节数增加
Process/Private Bytes计数器显示专门为特定进程保留的字节数。如果发生内存泄漏
一旦发生,该值将趋于稳定上升
进程/页面文件字节计数器显示页面文件的大小。Windows使用虚拟内存(页面文件)来补充
机器的物理内存。当机器的物理内存开始
填满后,内存页将移动到页面文件中。这是正常的
即使在内存充足的机器上也可以使用页面文件。但是
如果页面文件的大小稳步增加,这是一个好迹象
内存泄漏正在发生
我还想提到进程/句柄计数计数器。应用程序使用句柄来标识它们必须使用的资源
通道如果发生内存泄漏,应用程序通常会
创建其他句柄以标识内存资源。因此,在
句柄计数可能表示内存泄漏。然而,并非所有
内存泄漏将导致句柄计数增加
根据我的经验,这是准确的
我还想让您参考由微软员工苔丝撰写的这篇微软高级调试博客。世卫组织建议使用以下计数器。我发现上面的内容足以说明内存泄漏的存在,但我相信Tess的指示可以更深入地了解这个问题
- 所有堆中的.NET CLR内存/#字节
- .NET CLR内存/大对象堆大小
- .NET CLR内存/Gen 2堆大小
- .NET CLR内存/第1代堆大小
- .NET CLR内存/Gen 0堆大小
- 进程/专用字节
- 进程/虚拟字节
有更好的工具可以使内存泄漏测试更容易,例如和
但是,如果要使用性能计数器,
说明如何使用性能计数器测试内存泄漏
请记住,垃圾收集不会在某个实例处理后立即释放内存。它经过优化,仅在内存紧张时触发和释放内存。所以,如果您想测试内存泄漏,您应该在读取计数器读数之前手动执行垃圾收集
GC.Collect();
GC.WaitForPendingFinalizers();
这是一篇很好的文章,检查一些进程的私有字节和页面文件字节,它们完全相同(即使有几GB的可用物理内存)。这真的意味着整个过程的内存来自页面文件而不是物理内存,还是页面文件字节的含义更细微?