我经常在IBM上找到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)我在概要文件文件夹中找到了 heapdump 、 javacore 和 snap 文件--我认为它们可以告诉我问题的原因,但我不知道如何读取/使用堆转储、javacore和snap文件。
请告诉我如何预防/避免/修复OutOfMemoryException。谢谢
发布于 2008-10-08 14:34:40
对此的答案取决于与OutOfMemoryException关联的消息。你也可以试试-XX:MaxPermSize=..。并将其设置为256米这样更大的尺寸。
另外,如果在某个地方有一个递归函数,这可能会导致堆栈溢出。
如果可以,请发布与异常相关的消息。Stacktrace也可能有帮助。
发布于 2008-10-08 14:45:40
如果您想查看堆转储文件,IBM提供了分析它们的工具这里。
发布于 2009-05-19 08:12:56
“谢谢你的回忆”是一篇很好的关于JVM使用内存的文章,它可能有助于分析这个问题.
感谢布瓦莱塞提供这个链接
https://stackoverflow.com/questions/182876
复制相似问题