首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.OutOfMemoryError: Java堆空间

java.lang.OutOfMemoryError: Java堆空间
EN

Server Fault用户
提问于 2015-01-15 10:09:17
回答 3查看 8.5K关注 0票数 -1

在我们的应用程序中,我们同时拥有Apache (仅用于前端)和JBoss 4.1 (用于业务端)。我们使用Ubuntu 12作为服务器操作系统。我们的应用程序几乎每隔2-3小时就会连续抛出"java.lang.OutOfMemoryError: Java堆空间“(所以应用程序开始抛出内存堆大约一个小时,然后再次开始正常工作2-3小时,然后再次开始抛出内存异常)。我们的Java内存设置是

-Xms512m -Xmx1024m

我们的服务器物理上有6GB的Ram。请指导我们,我们需要增加爪哇堆大小。如果是,考虑到物理上的6GB的Ram,什么应该是理想的尺寸。

你好,普拉蒂克

EN

回答 3

Server Fault用户

发布于 2015-02-12 16:39:55

调试您的应用程序。如果您在几个小时后得到一个OOM,那么很可能它确实有问题,并且您不会通过添加更多的内存来修复它。你只要多加点时间,直到它死掉。此外,JBoss 4.1非常老,所以我假设没有什么特别的东西在上面运行。检查连接泄漏、堆转储和堆栈跟踪的日志,寻找泄漏的线索和它的来源,在非生产环境上运行不同的使用测试,并测量内存对每个请求的行为。您甚至可以在测试前后使用jmap和jdump生成堆转储和堆栈跟踪,以比较测试如何影响事物的状态,或者安排它们以特定的时间间隔运行,然后检查哪些对象没有被GC正确清除。此外,使用以下选项打开GC日志记录和转储:

代码语言:javascript
复制
set JAVA_OPTS=%JAVA_OPTS% -XX:OnOutOfMemoryError="%JAVA_HOME%\bin\jmap -dump:format=b,file=%JBOSS_HOME%\bin\heap_%%p.bin" -XX:ErrorFile=%JBOSS_HOME%\bin\hs_err_pid%%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%JBOSS_HOME%\bin -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -Xloggc:%JBOSS_HOME%\bin\gc-%DATE:~-8,-4%%DATE:~-14,-12%%DATE:~-11,-9%.log -XX:-TraceClassUnloading

这将对您的heap_PID.bin文件夹进行常规堆转储(hs_err_pidPID.log)、堆栈跟踪(hs_err_pidPID.log)和垃圾收集日志(gc_DATE.log) (您可以随意调优)。

绝大多数OOM都是由于应用程序错误造成的,所以在向应用程序抛出硬件之前,一定要开始查看应用程序。硬件是在你确保其他一切都是正确的之后出现的。即使当你让PM和开发者讨厌你的时候。

塞巴斯蒂安

票数 5
EN

Server Fault用户

发布于 2015-01-28 19:41:52

如果双倍堆大小不能像joe建议的那样解决问题,我建议添加

-XX:+HeapDumpOnOutOfMemoryError

参数以获得死后堆转储,您应该在以后仔细分析它,以便使用Eclipse内存分析器或JDK中的jvisualvm之类的工具进行内存泄漏。

票数 1
EN

Server Fault用户

发布于 2015-01-15 10:25:57

试着加倍。如果您没有使用6GB内存的其他进程,那么将1-2GB的ram分配给JVM应该是好的。

代码语言:javascript
复制
-Xms1024m -Xmx2048m

您还可以使用以下方法运行应用程序:

代码语言:javascript
复制
java -Xmx2g yourapp

您还可以尝试对应用程序进行分析,以发现可能的内存泄漏,或者找出是什么原因导致应用程序耗尽这么多内存。

请参阅:J控制台

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/659710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档