在我的 Tomcat 应用程序中,我最终遇到“内存不足”和“无法分配内存”错误。我想这与堆无关,因为它完全填满了系统内存,我几乎无法运行 bash 命令。
这个问题是怎么连接到堆上的?我如何才能正确设置堆大小,以便应用程序有足够的内存并且不会消耗过多的系统资源?
奇怪的是,一旦出现问题,“top”命令一直说tomcat只消耗了20%的内存,而且还有空闲内存。
谢谢。
编辑:
最佳答案
运行 bash 脚本的问题可能表示 I/O
问题,如果您的 JVM 一直在执行 Full GC(就是这种情况) ,如果你的堆快满了)。
首先要做的是使用-Xmx
增加堆。这可能会解决问题,或者 - 如果您有内存泄漏,它不会,您最终会再次遇到 OutOfMemoryError
。
在这种情况下,您需要分析内存转储。参见 my answer in this thread一些说明。
此外,启用垃圾收集日志(使用 -Xloggc:/path/to/log.file -XX:+PrintGCDetails
)然后使用 GCViewer 分析它们可能很有用。或 HPJmeter .
关于Java "Out of memory error"- 堆/系统 - 去哪里找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10893820/