2

我正在尝试在 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 忽略了它们。 烫发素

我已经尝试解决这个问题几个小时了,但没有成功..

任何人?

4

1 回答 1

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 参数将不起作用(并且仅需要 2 个参数中的一个,具体取决于 JVM 的版本)

请参阅 JVM 标志 CMSClassUnloadingEnabled 实际上做了什么?

-- 编辑 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 中设置的,而只是很好地格式化了参数。

于 2012-12-14T10:25:31.157 回答