在我的Tomcat应用程序中,我最终得到“Out of memory”和“无法分配内存”错误。我认为它与堆无关,因为它完全占用了系统内存,我几乎无法运行bash命令。
这个问题是如何连接到堆的?如何正确设置堆大小以使应用程序具有足够的内存,因此不会占用太多的系统资源?
奇怪的是,“top”命令一直说tomcat只消耗了20%的mem,并且一旦出现问题,仍然有空闲内存。
感谢。
编辑:
答案 0 :(得分:2)
运行bash脚本的问题可能表示I/O
问题,如果您的JVM始终执行 Full GCs ,情况可能就是这种情况(如果您的堆是几乎满)。
要做的第一件事是使用-Xmx
增加堆。这可以解决问题,或者 - 如果你有内存泄漏,它就不会,你最终会再次获得OutOfMemoryError
。
在这种情况下,您需要分析内存转储。有关说明,请参阅my answer in this thread。
此外,启用垃圾收集日志(使用-Xloggc:/path/to/log.file -XX:+PrintGCDetails
)然后使用GCViewer或HPJmeter进行分析可能会很有用。
答案 1 :(得分:0)
答案 2 :(得分:0)
如果你有4 GB ram,那么可以为HEAP分配3GB -
-Xmx3GB
答案 3 :(得分:0)
您还可以使用以下命令更改可用的perm gen大小:
-XX:PermSize =128米 -XX:MaxPermSize参数=256米