java.lang.OutOfMemoryError:java堆空间每2-3小时一次

java.lang.OutOfMemoryError:java堆空间每2-3小时一次,java,jboss,jboss-4.2.x,Java,Jboss,Jboss 4.2.x,在我们的应用程序中,我们有,Apache服务器(仅用于前端)和jboss4.2(用于业务/后端)。我们使用ubuntu12作为服务器操作系统。我们的应用程序反复抛出java.lang.OutOfMemoryError:“java堆空间”。(它抛出一个小时左右的OOMEs,然后在接下来的2-3个小时内恢复正常工作。然后它重复这个模式。)我们的Java内存设置是 -Xms512m -Xmx1024m 我们的服务器物理上有6 GB的Ram。请指导我们是否需要增加java堆大小。如果是,考虑到物理6G

在我们的应用程序中,我们有,
Apache服务器(仅用于前端)
jboss4.2(用于业务/后端)
。我们使用
ubuntu12
作为服务器操作系统。我们的应用程序反复抛出
java.lang.OutOfMemoryError:“java堆空间”
。(它抛出一个小时左右的OOMEs,然后在接下来的2-3个小时内恢复正常工作。然后它重复这个模式。)我们的Java内存设置是

-Xms512m -Xmx1024m

我们的服务器物理上有6 GB的Ram。请指导我们是否需要增加java堆大小。如果是,考虑到物理6GB内存,理想的内存大小应该是多少。

您确定没有内存泄漏吗?此外,如果您正在使用api(如POI for doc或itext for PDF)使用高内存,那么您正在使用代码来保持低内存占用。您可以使用探查器查看到底发生了什么。如果你仍然需要一步一步地增加,直到它达到一个合适的值

然后


因此…

我会检查您是否存在内存泄漏,例如,是否存在正在生成但未被释放的对象

您可以使用探查器(例如visualvm或
jmap)来实现这一点-histo:live
可能就足够了


如果没有内存泄漏且内存使用有效,我会尝试将JVM使用的最大内存量增加到最大,例如4 GB。

您是否经常部署?如果不是的话,你需要分析你的应用程序中的内存泄漏。标准的回答是:首先使用一个探查器来尝试找出所有内存的去向;三思而后行。JVisualVM是一个免费的示例。
-Xms512m -Xmx1024m
-Xms512m -Xmx2048m