【发布时间】: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