V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
matepi
V2EX  ›  Java

OpenJDK 上如何产生含内存内容的 Systemdump,类似 IBM 的 com.ibm.jvm.Dump.SystemDump()

  •  
  •   matepi · 2023-04-12 17:10:57 +08:00 · 1094 次点击
    这是一个创建于 624 天前的主题,其中的信息可能已经有所发展或是发生改变。

    很多时候单单通过 heapdump 来分析 oom 还是比较困难

    因为 oom 里面只存在内存结构、而没有内存内容

    有些开发设计上的做法,交易内容存储放在公共的 list/map 类型的对象中,而不是对象 Bean 中。

    此时,对于交易内存溢出的情况,只看到一个大 list/map 对象过大溢出,但明确不了具体是哪个交易、占据了公共类 list/map 式对象、各自多少,就很难查明原因。

    IBM JDK 可以使用 SystemDump 来得到一个含有内存对象内容的 SystemDump 。从对象字符串实际内容来寻找交易根源、原因。

    那么对应 OpenJDK 的获取 SystemDump 方式是什么呢?

    3 条回复    2023-04-13 09:08:40 +08:00
    feedcode
        1
    feedcode  
       2023-04-12 19:32:50 +08:00
    > 因为 oom 里面只存在内存结构、而没有内存内容
    这个结论就是错的,假如 heap 是 64G ,那 dump 就是 64G 的拷贝, 如果你看不到内存内容,那你用的工具不对或者文件不完整(磁盘空间不够)
    RuralHunter
        2
    RuralHunter  
       2023-04-12 22:25:20 +08:00
    没错,既然叫 heapdump ,显然是把整个 heap 都 dump 出来了,怎么可能没有内容。
    matepi
        3
    matepi  
    OP
       2023-04-13 09:08:40 +08:00
    @feedcode
    @RuralHunter
    确实,找了台 openjdk 环境试了一下,openjdk jmap 出来的 heapdump 是有内容的。
    用 IBM JDK 的 heapdump 没内容实现,去猜测 openjdk 的实现,是我不对了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5864 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:19 · PVG 10:19 · LAX 18:19 · JFK 21:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.