增加基于 Windows 安装程序的 Tomcat PermGen 空间

Increase Windows installer-based Tomcat PermGen Space

提问人:Manuel Calles 提问时间:1/14/2014 最后编辑:Manuel Calles 更新时间:12/4/2014 访问量:25598

问:

我在使用 Tomcat 时遇到了一些问题。我正在部署一个 Grails 应用程序,当我添加新功能时,我在 stacktrace 文件中遇到了这个(可悲的众所周知的)错误:

Caused by: java.lang.OutOfMemoryError: PermGen space
2014-01-13 19:28:35,753 [http-bio-8080-exec-26] ERROR StackTrace  - Full Stack Trace:
org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.OutOfMemoryError: PermGen space
    at gsp_liquidaciones_liquidacionDeComplejolist_gsp$_run_closure2.doCall(gsp_liquidaciones_liquidacionDeComplejolist_gsp.groovy:84)
    at gsp_liquidaciones_liquidacionDeComplejolist_gsp.run(gsp_liquidaciones_liquidacionDeComplejolist_gsp.groovy:105)
    at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:195)
    at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
...

我有一个基于 Windows 安装程序的 tomcat 安装,但我也没有 catalina.bat 文件。谷歌搜索许多页面建议修改此文件(catalina.bat)或注册JAVA_OPTS变量,但没有任何效果。那么,我必须在哪里指定此参数?

SET JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC”

我尝试通过 Apache Tomcat 7 属性窗口修改 Java 选项,但在修改后服务器无法启动。

tomcat java configuration tab

我的电脑安装了 4Gb RAM。

提前致谢。

Java Windows Tomcat Grails

评论


答:

2赞 Spindizzy 1/14/2014 #1

当 tomcat 作为 Windows 服务安装时,您应该有一个小型 Windows 应用程序“tomcat6w.exe”或“tomcat7w.exe”。当您启动此应用程序时,它有一个选项卡“Java”,您可以在其中设置 JVM 参数。有关更多详细信息,请参阅 Tomcat 服务的更多内存

您只需要输入以 -X 开头的参数。

评论

0赞 Manuel Calles 1/15/2014
这就是我尝试做的(我编辑了我的帖子),但是在更改后服务器无法启动。
0赞 Spindizzy 1/15/2014
参数列表中可能存在错误。您是否检查了服务器的日志?有关详细信息,请在日志记录选项卡中将级别设置为调试。
0赞 Manuel Calles 1/15/2014
这是 tomcat7-stderr.2014-01-14 文件中的最后一行日志: 这是 tomcat7-stdout.2014-01-14 文件中的最后一行日志: 您认为我在 Java 选项卡中指定的值是否适合我的 pc RAM?2014-01-14 19:48:29 Commons Daemon procrun stderr initialized Could not create the Java virtual machine.2014-01-14 19:48:29 Commons Daemon procrun stdout initialized Error occurred during initialization of VM Could not reserve enough space for object heap
0赞 Spindizzy 1/15/2014
是的,我认为指定的堆大小太高了。另请参阅此线程: stackoverflow.com/questions/14654328/...
0赞 Manuel Calles 1/16/2014
谢谢你的链接,我读了它,但我认为它无助于解决我的问题。毕竟,我的 Tomcat 安装工作正常,至少现在是这样。我想我只是推迟了这个问题。我将把我所做的配置写成答案建议。
8赞 Manuel Calles 1/16/2014 #2

对于以下系统规格:

  • Windows 7 64 位
  • 4 GB 安装内存
  • Intel Core i7 处理器
  • Java(TM) SE 运行时环境(内部版本 1.6.0_25-b06)

可接受行为的 Tomcat 7 Java 属性可能是:tomcat java configuration

2赞 teteArg 12/4/2014 #3

这在 apache-tomcat-8.0.15 中对我有用,但我认为对 tomcat 的版本来说都是一样的。

我已经执行了regedit并找到了以下路径:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tomcat8

并将 ImagePath 键更改为:

C:\apache-tomcat-8.0.15\bin\tomcat8.exe //RS//Tomcat8 ++JvmOptions -XX:PermSize=128m -XX:MaxPermSize=512m