【问题标题】:Java heap dump file (.hprof) is much larger than heap size in eclipse MATJava 堆转储文件 (.hprof) 远大于 Eclipse MAT 中的堆大小
【发布时间】:2021-03-26 02:22:30
【问题描述】:

我在使用 Java 的生产环境中经常遇到一些完整的 GC 问题,我怀疑内存是由网络库分配用于缓冲 TCP 请求结果的。

当内存使用率很高(大约 8GB)时,我已经转储了 Java 堆。我尝试用eclipse MAT分析.HPROF文件,文件大约8GB。

但在 eclipse MAT 中,总堆大小约为 200 MB,所以我找不到哪些对象占用了 8GB 堆内存。

由于 eclipse MAT 没有显示完整的堆转储内容,我不知道如何找到应用程序占用这么多内存的原因。

【问题讨论】:

  • 你有 GC 日志吗?
  • 并非所有进程内存都分配给堆
  • 我怀疑 Netty 正在分配堆外内存,我在内存转储中发现了巨大的空白 byte[] 数组
  • thrift解码出错,thrift客户端正在创建一个近2g字节数组进行缓冲
  • 你试过其他堆转储分析工具吗?

标签: java garbage-collection eclipse-mat


【解决方案1】:

如果你使用MAT内存分析器打开hprof转储,可能是堆的其余部分是无法访问的对象,MAT默认隐藏,见 https://stackoverflow.com/a/20405267/3484881

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2011-08-09
    • 2022-01-02
    • 1970-01-01
    • 2017-04-27
    • 2014-06-09
    相关资源
    最近更新 更多