2

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

现在我找到了一个这样的转储,它只包含 260MB 的未保留内存。转储怎么可能比他应该有的大小小得多?

4

2 回答 2

2

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

文本(经典)Heapdump 文件格式

于 2010-05-11T05:40:15.430 回答
2

Permgen 空间独立于堆进行管理,即使总体上有大量可用内存也可能耗尽。一些 web 框架(尤其是 JSF)是真正的猪,虽然很容易导致默认配置用完。可以使用 -XX:MaxPermSize=###m 增加

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

于 2010-05-14T15:49:15.960 回答