首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perfmon计数器检查内存泄漏

Perfmon计数器检查内存泄漏
EN

Stack Overflow用户
提问于 2012-11-20 13:01:57
回答 2查看 56.5K关注 0票数 21

我想检查我服务中的内存泄漏问题。我试过跟踪一组perfmon计数器。

  1. 所有堆中的.NET CLR Memory# Bytes
  2. .NET CLR内存\Gen 2堆大小
  3. .NET CLR Memory# GC句柄
  4. 固定对象的.NET CLR Memory#
  5. .NET CLR Memory#总已提交字节
  6. .NET CLR Memory#总保留字节
  7. .NET CLR内存\大对象堆大小

我已经从这里参考了上面的内容

还提到以下一套:

  1. 内存/可用字节
  2. 内存/已提交字节
  3. 进程/二等兵
  4. 进程/页文件字节
  5. 进程/手柄计数

我已经从这里参考了上面的内容

是否有任何参数/标准或其他最佳方法来识别用于内存泄漏的perfmon计数器?

有人能建议我设置一组计数器来检查内存泄漏吗?或以上的集合掩盖内存泄漏?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-04 14:07:56

若要使用性能监视器检测内存泄漏,请监视以下计数器:

  1. 内存/可用字节计数器允许您查看可用内存的总字节数。这个值通常会波动,但是如果您有一个内存泄漏的应用程序,它会随着时间的推移而减少。
  2. 如果发生内存泄漏,TheMemory/Committed计数器将稳步上升,因为随着可用内存字节数的减少,提交字节数将增加。
  3. Process/Private Bytes计数器显示专为特定进程保留的字节数。如果发生内存泄漏,则此值将趋于稳定上升。
  4. 进程/页文件字节计数器显示分页文件的大小。Windows使用虚拟内存(页面文件)来补充机器的物理内存。当机器的物理内存开始填满时,内存页被移动到分页文件中。即使在内存丰富的机器上使用分页文件也是正常的。但是,如果分页文件的大小稳步增加,这是内存泄漏正在发生的一个好迹象。
  5. 我还想提到进程/句柄计数计数器。应用程序使用句柄来标识它们必须访问的资源。如果发生内存泄漏,应用程序通常会创建额外的句柄来标识内存资源。因此,句柄计数的上升可能意味着内存泄漏。然而,并非所有内存泄漏都会导致句柄计数增加。

http://bshwjt.blogspot.co.uk/2010/08/how-to-find-memory-leak-using.html

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

我还要向您推荐微软员工Tess的Microsoft高级调试博客。世卫组织建议使用以下计数器。我发现上面的内容足以说明存在内存泄漏,但我相信苔丝的指示可以更深入地了解这个问题。

调试演示-内存检查

  • 所有堆中的.NET CLR内存/# Bytes
  • .NET CLR内存/大对象堆大小
  • .NET CLR内存/Gen 2堆大小
  • .NET CLR内存/Gen 1堆大小
  • .NET CLR内存/Gen 0堆大小
  • 进程/二等兵
  • 进程/虚拟字节
票数 33
EN

Stack Overflow用户

发布于 2015-07-26 01:27:44

有更好的工具可以使内存泄漏测试变得更容易,比如RedGate蚂蚁内存分析器JetBrains dotMemory Profiler

但是,如果要使用性能计数器,这篇文章将解释如何使用性能计数器测试内存泄漏。

请记住,垃圾收集不会在某些实例释放后立即释放内存。它被优化为只有在内存紧张时才触发和释放内存。因此,如果您想测试内存泄漏,您应该在进行反读数之前手动执行垃圾收集。

代码语言:javascript
复制
GC.Collect();
GC.WaitForPendingFinalizers();

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13473761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档