我一直在运行grails而没有任何问题,但最近在升级到Grails 1.1.1之后,我遇到了可怕的PermGen错误。在升级之前,没有这样的问题。
在GSP中使用<g:link>
和<g:render>
标记时似乎发生了错误,但我不确定这是否表明这是问题,但更多的是它用尽了在渲染这些标签时的空间。
通常,遇到PermGen错误的每个人都建议增加您的Java环境选项 - 但问题的根源可能是什么?它是Grails 1.1 / hibernate / spring问题吗?
错误:
2010-04-20 05:37:03,962 INFO [STDOUT] 05:37:03,961 ERROR [GroovyPagesServlet] Error processing GSP:
Error executing tag <g:render>: org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException:
Error executing tag <g:link>: java.lang.OutOfMemoryError: PermGen space
org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException:
Error executing tag <g:render>:
org.codehaus.groovy.grails.web.taglib.exceptions.GrailsTagException:
Error executing tag <g:link>: java.lang.OutOfMemoryError: PermGen space
答案 0 :(得分:2)
大型PermGen空间要求是Grails在开发模式下提供的自动重新编译功能的结果。必须增加PermGen空间是一个非常非常小的价格,以支付即时重新编译。 Grails生产模式中不会出现此问题。对大型PermGen的需求是因为Java将类信息存储在称为PermGen的内存部分中。这个内存区域与堆和内存的其他部分完全不同。 (增加堆空间不会增加PermGen大小)。当Grails重新编译一个类时,它会导致将一个新类添加到PermGen(而不是替换现有的类信息)。当您在devel模式下进行更多更改时,会消耗越来越多的PermGen内存。
答案 1 :(得分:1)
上面的好解释......尝试通过
增加它export JAVA_OPTS="-Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m"