我有一个 Tomcat 应用程序服务器,配置为在 OOM 上创建内存转储,它以 -Xmx1024M 启动,因此应该有一个 Gigabyte 可供他使用。
现在我找到了一个这样的转储,它只包含 260MB 的未保留内存。怎么可能转储比他应该可用的大小小得多?
最佳答案
Permgen 空间独立于堆进行管理,即使总体上有足够的可用内存,也可能会用完。一些 Web 框架(尤其是 JSF)是真正的 pig ,而且很容易导致默认配置用完。它可以通过 -XX:MaxPermSize=###m 增加
请记住,系统空间受堆和 permgen 之和的限制,因此如果您不按 PermGen 增加的量减少堆,则在开始收到无法创建 native 线程 OOM 异常之前可以消耗更少的总资源。
关于java - 内存转储比可用内存小得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2808270/