Tomcat Grails 2.0 PermGem空间与run war

Tomcat Grails 2.0 PermGem空间与run war,tomcat,grails,Tomcat,Grails,我有一个基本的应用程序,当我用grailsrun-app运行它时,它运行得很好,我想用grailsrun-war运行它。但我总是在任何请求下,在启动之后,tomcat的java.lang.OutOfMemoryError:PermGem spaceerror很出名 嗯,我知道我需要更改PermSize值,所以我尝试了在谷歌搜索后找到的所有方法(JAVA\u OPTS,GRAILS\u OPTS和GRAILS.tomcat.jvmArgs),现在我有了以下脚本: export JAVA_OPTS=

我有一个基本的应用程序,当我用
grailsrun-app
运行它时,它运行得很好,我想用
grailsrun-war
运行它。但我总是在任何请求下,在启动之后,tomcat的
java.lang.OutOfMemoryError:PermGem space
error很出名

嗯,我知道我需要更改
PermSize
值,所以我尝试了在谷歌搜索后找到的所有方法(
JAVA\u OPTS
GRAILS\u OPTS
GRAILS.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

我做错了什么?是否有其他方法可以为Grails2.0.1配置
PermSize


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

发现它必须在
BuildConfig.groovy
中配置:

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

现在它工作得很好。

看起来您通过
grails.tomcat.jvmArgs获得了正确的信息,为了便于将来参考,使用JDK附带的2个命令很容易判断jvm进程运行的标志
jps
显示了所有使用java运行的进程(很容易找到使用它的grails进程,
ps
jinfo
将转储运行中JVM进程的所有系统属性和标志(包括内存参数)。这使得查看进程是否以您期望的所有值运行变得非常容易。

您知道grails进程是否接受您的参数吗?ps-ef | grep java。您是否在底层的tomcat启动中提出了它。sh?哦,谢谢您的建议,它似乎接受了我的参数,但只是为了
grails
command、 并且它运行第二个进程,对于tomcat,没有这样的参数:(好的。您是否尝试将grails.tomcat.jvmArgs设置为构建属性?在1.3.5中似乎是一个已解决的问题,可能它尚未移植到2.x。根据此线程,唯一的解决方案是将jvm参数值硬编码到tomcat pluginGabe,是的,我尝试了
grails-Dgrails.tomcat.jvmArgs=“-XX:PermSize=512m”
。它的语法正确吗?很好,这就是我所说的“设置为构建属性”;-)是的,我错过了它,因为我确信它必须在命令行设置,因为这样的参数的性质不令人担忧。我很高兴它能为您工作。如果您愿意,可以+1我的注释。玩得开心。我如何为Grails 2.5.0、Java 8和Tomcat 8做到这一点?