【问题标题】:Heap dump - retained size cyclic references堆转储 - 保留大小循环引用
【发布时间】:2019-08-11 10:31:23
【问题描述】:

prod 中一个长期运行的旧应用程序内存不足。在分析线程转储时,我使用保留大小导航自己并寻找具有大量保留大小的对象,以了解导致内存问题的原因(泄漏或来自某个进程的对象过多)。

在这种情况下,内存泄漏报告从码头指向 HashedSession。查看会话时,我可以看到应用内会话包含属性中的对象,这些对象引用循环中的同一会话。

现在,问题是我无法确定构成保留大小(总保留大小的总和)的组件是什么,以及它们来自哪里。会话中最大的大小是会话本身,其他属性几乎没有。

Class Name                                                                          | Retained Heap
----------------------------------------------------------------------------------------------------
org.eclipse.jetty.server.session.HashedSession @ 0x77d47bf70                        |   201 414 144
|- _attributes java.util.HashMap @ 0x782c20250                                      |   201 414 056
|  |- table java.util.HashMap$Node[16] @ 0x78594db98                                |   201 414 008
|  |  |- [10] java.util.HashMap$Node @ 0x787047090                                  |   201 411 880
|  |  |  |- value com.vaadin.terminal.gwt.server.WebApplicationContext @ 0x784244740|   201 411 848
|  |  |  |  |- session org.eclipse.jetty.server.session.HashedSession @ 0x77d47bf70 |   201 414 144
|  |  |  |  |- browser com.vaadin.terminal.gwt.server.WebBrowser @ 0x7832eeb68      |           400
|  |  |  |  |- applications java.util.HashSet @ 0x787a9e1a8                         |           192
|  |  |  |  |- applicationToAjaxAppMgrMap java.util.HashMap @ 0x783280118           |           160
|  |  |  |  |- listeners java.util.Collections$SynchronizedList @ 0x787a9e190       |           104
----------------------------------------------------------------------------------------------------

我知道我在这里可能做了一些愚蠢的事情,但我认为通过遵循最大的保留尺寸(或跳过循环的第二大尺寸),我会找到问题的真正恶棍。但是我找不到任何其他具有相似保留大小的保留对象集来将我指向下一个可疑对象(会话的原始保留大小除外)。

在 Java 8、HotSpot JVM 上运行

【问题讨论】:

    标签: jvm out-of-memory vaadin heap-memory eclipse-memory-analyzer


    【解决方案1】:

    是的,您遵循了从HashedSession @ 0x77d47bf70HashedSession @ 0x77d47bf70 的循环引用。但是,您并没有完全看透 _attributes HashMap。里面还有什么?

    您是否通过右键单击 HashedSession @ 0x77d47bf70 来使用“列表对象 -> 传出引用”?

    【讨论】:

    • 实际上,在地图中,或多或少没有其他东西(我浏览了其他的,但它们的尺寸明显较小)。不幸的是,我换了公司,所以我不能从中断的地方继续。还是谢谢。
    • 感谢您的跟进。我猜那是那个 HashedSession 里面的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2012-01-15
    • 2015-04-25
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多