我正在尝试在Windows Tomcat服务器上运行多个工具。服务器启动正常,我也可以看到Tomcat的管理器页面。但是当我打开一个工具时,会出现“OutOfMemoryError:PermGen space”。我在catalina.bat中设置MaxPermSize尝试了很多,这是我的CATALINA_OPTS:
set CATALINA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms64m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"
当我在我的Tomcat服务器旁边运行JVisualVM时,我可以看到参数被很好地拾取:
但是当我进入监视器选项卡并检查PermGen时,最大值是67mb而不是我设置CATALINA_OPTS的512。所以参数设置,但Tomcat忽略它们..
我已经尝试将此问题解决了几个小时,但没有成功..
任何?
答案 0 :(得分:5)
删除套装中的“”,你很好......不知道为什么。但那就是答案
设置CATALINA_OPTS = -Djava.awt.headless = true -Dfile.encoding = UTF-8 -server -Xms64m -Xmx512m -XX:PermSize = 128m -XX:MaxPermSize = 512m -XX:+ CMSClassUnloadingEnabled -XX:+ CMSPermGenSweepingEnabled
- 编辑
顺便说一句,我认为你也想要UseConcMarkSweepGC,否则其他2个CMS参数将不会做任何事情(只需要其中一个,取决于JVM的版本)
请参阅 What does JVM flag CMSClassUnloadingEnabled actually do?
- 编辑2
这个问题也在这里被问到tomcat6:https://serverfault.com/questions/64894/setting-catalina-opts-for-tomcat6-on-windows-doesnt-work
太糟糕了,博主没有解释为什么你不需要在windows中使用引号。
http://javahowto.blogspot.nl/2006/06/6-common-errors-in-setting-java-heap.html
但我认为这是因为引用它被视为一个重要论点。我唯一不理解的是为什么jvisualvm假装你正确设置它。但我想参数的显示实际上并没有看到它是如何在JVM中设置的,而只是很好地格式化了参数。