performance - Perfmon计数器检查内存泄漏

标签 performance memory-leaks performancecounter perfmon memory-leak-detector

我想检查服务中的内存泄漏问题。我试过下面的perfmon计数器集。

整个堆中的

  • .NET CLR内存\#字节
  • .NET CLR内存\第二代堆大小
  • .NET CLR内存\#GC处理
  • .NET CLR内存\固定对象数
  • .NET CLR内存\#已提交的总字节数
  • .NET CLR内存\#保留的总字节数
  • .NET CLR内存\大对象堆大小

  • 我从here引用了上面的设置

    也指以下设置:
  • 内存/可用字节
  • 内存/已提交字节
  • 处理/专用字节
  • 进程/页面文件字节
  • 处理/处理计数

  • 我从here引用了上面的设置

    是否有任何参数/标准或其他最佳方法来识别用于内存泄漏的性能计数器?
    谁能建议我一组计数器来检查内存泄漏?还是以上覆盖内存泄漏?

    最佳答案

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

  • 内存/可用字节数计数器使您可以查看可用内存的字节总数。该值通常会波动,但是如果
    您有内存泄漏的应用程序,它将减少
    时间。
  • 如果发生内存泄漏,则“Memory / Committed Bytes”计数器将稳步上升,因为随着
    内存减少,提交的字节数增加。
  • “进程/专用字节数”计数器显示专门为特定进程保留的字节数。如果是内存泄漏
    发生时,该值将趋于稳定上升。
  • 进程/页面文件字节数计数器显示页面文件的大小。 Windows使用虚拟内存(页面文件)来补充
    机器的物理内存。随着机器的物理内存开始
    填满后,内存页面将移至页面文件。这是正常的
    即使在具有大量内存的计算机上也要使用的页面文件。但
    如果页面文件的大小稳定增长,则表明
    发生内存泄漏。
  • 我也想提到“处理/处理计数”计数器。应用程序使用句柄来标识他们必须使用的资源
    访问。如果发生内存泄漏,应用程序通常会
    创建其他句柄以标识内存资源。所以上升
    句柄计数可能表示内存泄漏。但是,并非全部
    内存泄漏将导致句柄数增加。

  • Source

    以我的经验,这是正确的。

    我还请您引用Microsoft员工Tess的这个Microsoft Advanced Debugging博客。谁建议以下计数器。我发现以上内容足以表明存在内存泄漏,但是我相信Tess的说明可以提供对该问题的更深入了解。

    Debugging Demos - Memory Review
  • .NET CLR内存/所有堆中的#个字节
  • .NET CLR内存/大对象堆大小
  • .NET CLR内存/第二代堆大小
  • .NET CLR内存/第1代堆大小
  • .NET CLR内存/第0代堆大小
  • 处理/专用字节
  • 进程/虚拟字节
  • 关于performance - Perfmon计数器检查内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13473761/

    相关文章:

    java - 使用 JNI 从 C 调用 java 代码时发生内存泄漏

    angularjs - IE 11 抛出没有足够的存储空间来完成此操作

    java - JNI释放内存

    c# - 递增自定义性能计数器 .net 4.0 Windows 7

    windows - 在没有 lodctr 的情况下注册性能计数器

    ios - 延迟将 HTML 字符串加载到 UIWebView

    java - 在 Java 中使用大量对象是否存在性能问题

    java - 我怎样才能更快地减去这些列表?

    c++ - 如何在 C++ 中读取性能计数器

    PHP PDO 与普通 mysqli 速度性能基准