发生OutOfMemoryError:播放框架中的Java堆空间
问题描述:
我正在用java创建基于播放的Web应用程序。当我运行它时出现以下错误的错误:发生OutOfMemoryError:播放框架中的Java堆空间
Execution exception (In /app/controllers/Application.java around line 12)
OutOfMemoryError occured : Java heap space
play.exceptions.JavaExecutionException: Java heap space
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:227)
at Invocation.HTTP Request(Play!)
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:215)
at java.lang.StringBuffer.toString(StringBuffer.java:585)
at java.io.StringWriter.toString(StringWriter.java:193)
at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:248)
at play.templates.Template.render(Template.java:26)
at play.mvc.results.RenderTemplate.<init>(RenderTemplate.java:24)
at play.mvc.Controller.renderTemplate(Controller.java:657)
at play.mvc.Controller.renderTemplate(Controller.java:637)
at play.mvc.Controller.render(Controller.java:692)
at controllers.Application.index(Application.java:12)
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:540)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:498)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:474)
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:469)
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:157)
... 1 more
任何人知道或可能有同样的问题,请给我建议。
答
一个快速的解决方法是增加JVM的内存(如何完成取决于正在使用的JVM,Oracle的JVM将支持-Xmx...m
选项,其中......表示以兆字节为单位的最大内存)。
JVM最初可能得到的内存太少,如果情况并非如此,那么检查内存使用情况应该有所帮助,例如,使用jmap(创建堆转储)和jhat(分析堆转储)。
答
在谷歌列表有几个月前有人指出,与一些结构groovy模板引擎需要大量的内存。我假设你有同样的问题。
答
偶尔也会发生这种情况。 @托马斯的答案是一个更好的解决方案,但如果您需要快速修复,请关闭并重新启动Play。
您可以使用以下命令运行您的应用程序:'play run your_app -Xss1m' – Jonas
您应该为[内存泄漏]配置应用程序(http://java.sun.com/developer/technicalArticles/J2SE/monitoring/ ) - 如果没有泄漏,你可以增加你的记忆量 – oliholz
感谢Jonas和olihoiz你的答案,它可能可以帮助我解决问题。 – Sapardi