Grails 2.0 PermGen空间与战争

时间:2012-04-25 11:08:50

标签: tomcat grails

我有一个基本的应用程序,当我使用grails run-app运行它时工作正常,我想使用grails run-war运行它。但是,在任何请求之后,我总是在启动后得到着名的tomcat java.lang.OutOfMemoryError: PermGem space错误。

嗯,我知道我需要更改PermSize值,因此我尝试了在google搜索后找到的所有方式(JAVA_OPTSGRAILS_OPTSgrails.tomcat.jvmArgs) ,现在我有以下脚本:

export JAVA_OPTS="-Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m"
export GRAILS_OPTS="-Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m"
grails -Dgrails.tomcat.jvmArgs="-Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m" run-war

但它没有帮助。第一次请求时仍然有java.lang.OutOfMemoryError: PermGen space

我做错了什么?有没有其他方法可以为Grails 2.0.1配置PermSize

更新:我运行ps -ef | grep java并发现Grails实际上得到了我的参数,但是它为tomcat运行了一个新进程,没有这个参数。

2 个答案:

答案 0 :(得分:13)

发现必须在BuildConfig.groovy配置

grails.tomcat.jvmArgs= ["-Xms256m",  "-Xmx1024m", "-XX:PermSize=512m", "-XX:MaxPermSize=512m"]

现在它工作正常。

答案 1 :(得分:1)

看起来你得到了grails.tomcat.jvmArgs的正确信息,为了将来参考,使用JDK附带的2个命令可以很容易地判断jvm进程正在运行什么标志。 jps显示了使用java运行的所有进程(通过常规ps比较容易找到grails进程,jinfo <PID>将为正在运行的JVM进程转储所有系统属性和标志(包括内存args)。它可以很容易地看到一个进程是否正在运行你想要的所有值。