【问题标题】:What does a memory leak look like in JConsole?JConsole 中的内存泄漏是什么样的?
【发布时间】:2015-12-19 21:52:24
【问题描述】:

我是trying to use JConsole to see if I have a memory leak,但不知道要找什么。如果我不得不猜测,内存使用量应该总是上升,尽管垃圾收集,像这样:

正如您在我的另一个 SO 问题中看到的那样,我看到了一个锯齿状边缘,即内存使用率上升——即使浏览器关闭并且没有请求访问我的本地 Tomcat 服务器——然后下降。

Java 中的内存泄漏在 JConsole 中“看起来像”什么?

【问题讨论】:

  • 这真的取决于很多事情,尤其是您选择了哪个垃圾收集器,但我通常寻找的是,随着时间的推移,堆使用量会继续上升。所以在第二个涂鸦中,“山谷”的最底部逐渐向上爬。
  • @RoddyoftheFrozenPeas,我猜它上升的速度取决于泄漏的类型。
  • 每次完全收集后,使用量不断增加。虽然这可能意味着你只需要比你的程序更多的内存,如果你给它更多,它就会失败。

标签: java memory-leaks jconsole


【解决方案1】:

我认为了解内存泄漏的最佳方法是进行实验。尝试这样的事情来创建内存泄漏:

    Collection<Object> data = new LinkedList<>();
    while(true) {
        long[] canBeGarbageCollected = new long[10000];
        long[] canNotBeGarbageCollected = new long[100];
        data.add(Arrays.asList(canNotBeGarbageCollected));
    }

除了 JConsole,您还拥有 VisualVM,它有一个名为“Visual GC”的好插件。 Java Mission Control with Flight Recording 可以为您提供很多详细信息。命令行中也存在一个非常强大的工具:

jstat -gcutil -h20 $PID 1000

这将表明内存泄漏最终会导致 100% 的旧空间利用率 (O) 并且 CPU 将花费越来越多的时间进行完整的垃圾回收 (FGCT)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-09
    • 2015-08-04
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    相关资源
    最近更新 更多