Java 由于意外的outOfmemory错误,应用程序失败。

Java 由于意外的outOfmemory错误,应用程序失败。,java,memory,jvm,glassfish-3,Java,Memory,Jvm,Glassfish 3,我有一个运行在glassfish 3.1.1中的java应用程序 一旦ps旧一代达到最大值(-Xmx是512m),它就会下降,但我的整个应用程序会挂起并死掉,它会抛出内存:java堆空间 我不明白为什么老一代的ps已经下降了 唯一的修复方法是重新启动服务器 我需要应用程序继续ps旧一代下降 您可以监视服务器,并在必要时使用srcipt重新启动服务器。由于关闭过程,内存使用率可能会下降。outOfmemory异常清楚地表明,由于内存不足,它正在消亡 例如,可以选择微调老一代的规模。但是,您应该拍摄

我有一个运行在glassfish 3.1.1中的java应用程序

一旦ps旧一代达到最大值(-Xmx是512m),它就会下降,但我的整个应用程序会挂起并死掉,它会抛出
内存:java堆空间

我不明白为什么老一代的ps已经下降了 唯一的修复方法是重新启动服务器


我需要应用程序继续ps旧一代下降

您可以监视服务器,并在必要时使用srcipt重新启动服务器。

由于关闭过程,内存使用率可能会下降。outOfmemory异常清楚地表明,由于内存不足,它正在消亡


例如,可以选择微调老一代的规模。但是,您应该拍摄堆快照,并检查存储的所有数据是否都是必需的。可能存在内存泄漏,或者可能需要增加应用程序的可用内存。

谢谢您的回复。1.您提到“一个堆快照并检查是否需要存储所有数据”,我所做的只是从数据库中获取数据并存储在请求中。是否建议您从数据库中获取较少的信息?2.我增加了-Xms,但一旦应用程序运行更长时间,我就遇到了同样的问题:您是否将其存储在request.getSession()对象中?您在请求中存储了数据库中的多少数据?对不起,我没有在请求中存储数据。但在每个页面上,我显示了来自数据库的大约50个图像,每个图像都不到200k,然后我使用outputstream写入字节[]对于我的web应用程序,您可以在应用程序内存不足时进行堆转储,也可以使用工具显式调用它,例如,您正在加载的图像可能由于某些延迟引用而保留在内存中。只有在分析占用内存的内容后,才能确定原因。我只是得到了更多详细信息:outOfMemory问题发生后,我试图打开一个网页,但失败了,但当我查看日志文件时,应用程序会将http请求发送到后端,直到到达PrepareStation.executQuery(),“outOfMemorry:java堆空间”异常被抛出。如果应用程序死了,那么什么都不应该发生,对吗?那个么为什么应用程序仍然向后端发送http请求呢?我想要的是,一旦ps旧一代在达到最大值之前达到98%,就释放它,因为它已经死了。