4

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

好吧,我知道我需要更改值,所以我尝试了在谷歌搜索(和)PermSize后找到的所有方法,现在我有以下脚本: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第一次请求。

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

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

4

2 回答 2

13

发现必须配置在BuildConfig.groovy

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

现在它工作正常。

于 2012-04-25T12:41:36.607 回答
1

看起来您获得了正确的信息grails.tomcat.jvmArgs,以供将来参考,使用 JDK 附带的 2 个命令很容易判断 jvm 进程正在运行哪些标志。 jps显示所有使用 java 运行的进程(很容易找到与此比较的 grails 进程 ot regular psjinfo <PID>并将转储运行 JVM 进程的所有系统属性和标志(包括内存参数)。它可以很容易地查看是否或者没有一个进程正在以您期望的所有值运行。

于 2012-04-25T15:28:27.160 回答