Java "Out of memory error"- 堆/系统 - 去哪里找?

标签 java tomcat memory heap-memory

在我的 Tomcat 应用程序中,我最终遇到“内存不足”和“无法分配内存”错误。我想这与堆无关,因为它完全填满了系统内存,我几乎无法运行 bash 命令。

这个问题是怎么连接到堆上的?我如何才能正确设置堆大小,以便应用程序有足够的内存并且不会消耗过多的系统资源?

奇怪的是,一旦出现问题,“top”命令一直说tomcat只消耗了20%的内存,而且还有空闲内存。

谢谢。

编辑:

跟进: BufferedImage leaks - are there any alternatives?

最佳答案

运行 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/

相关文章:

hibernate - Tomcat 7、Hibernate 3.6、PostgreSQL 9.2 | Maven java.lang.NoClassDefFoundError

java - 如何在jsp中将本地视频放到我的本地主机上

session 复制中的 Tomcat session 粘性

linux - smem如何计算RSS、USS和PSS?

java - JavaFX 中的命令行参数

java - 避免在 Web 应用程序中多次登录

linux - 如何在linux shell中获取内存地址的值

javascript - 函数声明优先/覆盖变量声明?吊装?为什么?

java - 有没有办法在 Android 中创建堆栈溢出 "Tags"EditText/Input 字段?

java - Spring jUnit 测试属性文件