Java IBM Websphere OutOfMemoryException

Java IBM Websphere OutOfMemoryException,java,web-services,jakarta-ee,websphere,Java,Web Services,Jakarta Ee,Websphere,通常,我在IBMWebSphereApplicationServer上发现OutOfMemoryException。 我认为出现这种异常是因为我的应用程序从数据库中检索到大量数据。所以,我将所有查询的检索数据限制为不超过1000条记录,并将JVM设置为 + Verbose garbage collection + Maximum Heap size = 1024 (RAM on my server is 16 GB and now I already change to 8192) + Debu

通常,我在IBMWebSphereApplicationServer上发现OutOfMemoryException。 我认为出现这种异常是因为我的应用程序从数据库中检索到大量数据。所以,我将所有查询的检索数据限制为不超过1000条记录,并将JVM设置为

+ Verbose garbage collection
+ Maximum Heap size = 1024 (RAM on my server is 16 GB and now I already change to 8192)
+ Debug arguments = -Djava.compiler=NONE -Xdebug -Xnoagent  
                    -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7777
+ Generic JVM arguments = -Dsun.rmi.dgc.server.gcInterval=60000 
                          -Dsun.rmi.dgc.client.gcInterval=60000 -Xdisableexplicitgc  
                          -Dws.log=E:\WebApp\log -Dws.log.level=debug
(ws.log and ws.log.level are my properties)
我在profiles文件夹中找到了heapdumpjavacoresnap文件,我想它们可以告诉我问题的原因,但我不知道如何读取/使用heapdump、javacore和snap文件

请告诉我如何防止/避免/修复OutOfMemoryException。
谢谢

此问题的答案取决于与OutOfMemoryException关联的消息。您也可以尝试-XX:MaxPermSize=。。。并将其设置为更大的值,如256m

此外,如果在某个地方有递归函数,则可能会导致堆栈溢出


如果可以,请发布与异常相关的消息。Stacktrace也可能有帮助。

如果您想查看堆转储文件,IBM提供了分析这些文件的工具。

尝试在本地重现问题,以便您可以使用类似JProfiler的工具对其进行调试。即使您不能在本地强制OOM,您也有可能在JProfiler中看到内存的增加。然后拍摄快照并查找未被垃圾收集的类。这不是一门精确的科学,但它比通过IBM heapdump查看要容易得多。但是,如果必须的话,检查堆转储的旧方法是使用heaproot。这可能取决于您使用的版本。我知道IBM JDK的某些版本在压缩方面存在问题,因此即使您有足够的内存,也可以获得OOM,因为没有足够大的可用片段。

我假设您使用hibernate/JPA作为持久性提供程序?您正在使用二级缓存吗?如果是,您是否考虑过从缓存中逐出大型结果集?

如果我们不知道这是一种什么样的OutOfMemoryError,那么这个问题很难回答
permgen
heapspace
是两种截然不同的野兽

我在JBoss上追求perm gen已经有好几个月了,尽管这种特殊类型的问题对于任何在运行中重新加载web应用程序的应用服务器来说都是普遍存在的。这一传奇被记录在案

你的那些垃圾堆。。。可能是您可以在中分析它们。

是一篇关于JVM内存使用的好文章,这可能有助于分析此问题

谢谢你的链接