Perfmon计数器检查内存泄漏

CSh*_*arp 21 performance memory-leaks perfmon performancecounter memory-leak-detector

我想检查一下我服务中的内存泄漏问题.我试过以下一组perfmon计数器.

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

我在这里提到了上面的集合

还提到以下集:

  1. 内存/可用字节
  2. 内存/承诺字节
  3. 流程/私有字节
  4. 进程/页面文件字节
  5. 处理/处理计数

我在这里提到了上面的集合

是否有任何参数/标准或任何其他最佳方法来识别内存泄漏的perfmon计数器?
任何人都可以建议我使用一组计数器来检查内存泄漏吗?或以上设置涵盖内存泄漏?

Ami*_*ble 30

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

  1. Memory/Available Bytes计数器允许您查看可用内存的总字节数.此值通常会波动,但如果您的应用程序存在内存泄漏,则会随着时间的推移而减少.
  2. 如果发生内存泄漏,内存/提交字节计数器将稳定上升,因为随着内存可用字节数的减少,提交字节数会增加.
  3. Process/Private Bytes计数器显示专门为特定进程保留的字节数.如果发生内存泄漏,该值将趋于稳定上升.
  4. Process/Page File Bytes计数器显示页面文件的大小.Windows使用虚拟内存(页面文件)来补充计算机的物理内存.当机器的物理内存开始填满时,内存页面会移动到页面文件中.即使在具有足够内存的计算机上也可以使用页面文件.但是如果页面文件的大小稳定增加,那么这是发生内存泄漏的好兆头.
  5. 我还想提一下Process/Handle Count计数器.应用程序使用句柄来标识它们必须访问的资源.如果发生内存泄漏,应用程序通常会创建额外的句柄来识别内存资源.因此,句柄计数的增加可能表示内存泄漏.但是,并非所有内存泄漏都会导致句柄数量增加.

资源

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

我还会向您推荐微软员工Tess的Microsoft高级调试博客.谁建议以下柜台.我发现上述内容足以表明存在内存泄漏,但我相信Tess的指示可以提供更深入的洞察力.

调试演示 - 内存审查

  • 所有堆中的.NET CLR内存/#字节
  • .NET CLR内存/大对象堆大小
  • .NET CLR内存/第2代堆大小
  • .NET CLR内存/第1代堆大小
  • .NET CLR内存/ Gen 0堆大小
  • 流程/私有字节
  • 进程/虚拟字节