内存转储比可用内存小得多

时间:2010-05-11 05:24:22

标签: java memory-leaks dump memory-dump hprof

我有一个配置为在OOM上创建内存转储的Tomcat应用服务器,它以-Xmx1024M启动,因此他应该可以使用技嘉。

现在我发现了一个这样的转储,它只包含260MB的未保留内存。转储怎么可能比他应该提供的那么小?

2 个答案:

答案 0 :(得分:2)

只有有关已分配内存使用情况的信息才会被转储到文件中。 堆转储不是堆的二进制映像,它包含有关数据类型等的信息,可能会超出可用内存。

Text (classic) Heapdump file format

答案 1 :(得分:2)

Permgen空间独立于堆进行管理,即使总体上有足够的可用内存也可以耗尽。一些Web框架(特别是JSF)是真正的生猪,但很容易导致默认配置用完。可以使用-XX:MaxPermSize = ### m

来增加它

请记住,系统空间受堆和permgen之和的约束,因此如果不按PermGen增加的数量减少堆,则可以在开始获取无法创建本机线程OOM异常之前消耗更少的总资源。 / p>