V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
doctortao
V2EX  ›  程序员

推荐一款检查内存泄露工具 plumbr

  •  
  •   doctortao · 2014-12-25 13:47:14 +08:00 · 4004 次点击
    这是一个创建于 3651 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Plumbr是一款监控JVM的工具,能检测的内存泄露,GC时间过长,线程锁的情况。最近公司小伙伴自己业余时间开发的运营系统时不时崩溃,处于玩耍新工具的心态,我们使用了Plumbr来作为我们的JVM性能监控工具。
    首先你要在他们的网站注册一个新账号,将它的jar包下载下来。然后根据JVM的不同大概会有一些区别,以TOMCAT来说,就是在bin目录里的catalina.sh中多加入JAVA_OPT。

    ```
    -javaagent:/path-to/plumbr.jar
    ```

    然后再重启的时候将这个jar包带起来,从而实现对数据的抓取。

    ---

    PLUMBR的支持范围:

    | JDK | Version |
    | ------------- | ----------- |
    | Oracle HotSpot | 6, 7 and 8|
    | Open JDK 6 and 7 | 28 |

    | Server | Version |
    | ------------- | ----------- |
    | Jetty | 6, 7 and 8|
    | JBoss | 7+ |
    | WebLogic | 8+ |
    | Tomcat | 6+ |
    | Glass-fish | 4+ |

    基本上包括了主流的jvm系统,还是支持的蛮全的。支持的语言当然只有JAVA,不过在它官网是这么说的:
    Although officially Plumbr supports only Java, we encourage all users of other JVM-based languages – such as Groovy, Jython, JRuby, Clojure, Scala etc – to give it a try and let us know about the test results. This will help us further broaden the list of supported environments.

    反正他也不知道能不能支持,你可以试试看~~

    ---

    它抓取的信息包括以下内容:

    对于操作系统,JVM设置和启动参数,通过RuntimeMXBean和System.getProperties接口获得的数据。
    关于garbage collection events的信息 - gc的频率,收集时间,释放内存等量
    有关对象分配的统计信息。信息是基于分配点进行收集的,包括类名和根据类名创建的对象和创建对象的代码行。
    事件报告的数据。内存泄漏,事故报告包含对象计数,占用的空间,分配点(包括类名称和代码行)和线程的堆栈跟踪。

    总结来说就是,JVM的设置,GC的log,和基于堆栈信息拉出来的对象信息。

    ---

    成功部署以后,进入的页面非常的简洁:
    首先关注的是堆内存的使用情况,是否有泄漏,泄露的话会通过leaksize绘出红色的泄露情况。


    从图表上可以看出我现在的内存还是没有泄露的。图表右上角有一个threshold,可以设置阀值,一旦发现有泄漏的情况就给你发报警邮件。


    第二个图表是GC回收时间,从这里可以看到你每次GC的回收时间是多少,还是通过右上角的设置自定义你觉得多长时间是长GC,这里由于我设置的事1MS,所以几乎每次GC都被当做成了长GC.
    第三个图表示是对线程锁的监控,从这里可以看出这一小时内你的锁的数量和时间,是否存在超长时间的锁。

    ---

    对于上述图表出现的问题,plumbr会详细记录每一次问题的情况,以便用户查找。


    对于每一个问题,它还有详细的描述,包括问题发生的机器,时间,造成问题的原因,问题发生的对象和方法等等,甚至有一些常见的问题,它还能告诉你怎样修复它。这可以说是它最吸引我的地方。
    附上一个它对我memory leak诊断的链接:
    https://portal.plumbr.eu/shared#/incident/188484?token=wgy4UKRNk13Wvt7-ZWzy1cH__Eg
    不只是memory leak,对长GC和锁它好像也要有所诊断,不过因为是付费版提供的功能所以就不太清楚了。
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1128 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:47 · PVG 02:47 · LAX 10:47 · JFK 13:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.