0

我怀疑我的应用程序有内存泄漏。我有 GC 日志,当我查看它们时,我发现内存使用量约为 9-10GB。然后我尝试将内存转储到文件中,文件大小约为 5GB。

问题是为什么转储的大小没有 9GB,而只有 5GB?如何强制 jrcmd 转储全部内存?

我使用的命令:

jrcmd 11906 hprofdump filename=/path_to_dump/dump.hprof

虚拟机:

Java(TM) Platform, Standard Edition for Business (build 1.5.0_28-b04)
Oracle JRockit(R) (build R28.1.3-11-141760-1.5.0_28-20110301-1432-linux-x86_64, compiled mode)

更新:

问题是由于 GC 日志内存永远不会释放到低于 9GB 的级别。JDK 工具将转储截断为 5GB。为什么?

4

2 回答 2

0

你的 GC 日志是什么样的?

顺便说一句,您是否尝试过名为 Memleak 的 JRockit Mission Control 工具?它对于查找内存泄漏很有用。

于 2014-11-25T10:38:51.473 回答
0

我假设 JRockit 的行为类似于 HotSpot:如果您的实时数据集只有 5 GB,那么转储也只有 5 GB。我假设您的 9-10 中只有 5 GB 是实时的。

于 2014-11-24T15:04:27.387 回答