如何正确设置PermGen大小?

64

我有一个安装了Tomcat、Java和Grails的虚拟机。我一直遇到PermGen错误,所以我查找并找到了解决方案:

set JAVA_OPTS="-Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m"

我使用SSH访问虚拟机并输入上述参数。我认为这样可以解决问题。问题是,我想确保我做得正确。所以我再次搜索了一下如何检查当前permSize,这是我找到的解决方案:

jinfo -flag MaxPermSize 6444

6444是进程ID,而我得到了这个响应。

-XX:MaxPermSize=85983232

问题:maxPermSize的值是以字节为单位吗?如果是,那么这意味着java_opts命令没有起作用。我期望得到512m,但是85983232字节=82 mb...还是我看错了..?有人能给我讲解一下吗?D:


你是否重启了Tomcat进程?使用ps -wwf 6444命令可以查看启动该进程的完整命令。请检查您的选项是否已包含在内。您还可以启动jconsole(包含在jdk中)并连接到该进程,然后检查“常规信息”选项卡和“内存”选项卡。 - GeertPt
我还没有重启Tomcat。我想我忘记了这个过程.. D: 抱歉,我对部署这方面还有点新.. 但是作为开发人员,我应该知道这种东西.. 谢谢 :) - 황현정
4个回答

76
你需要修改Tomcat Catalina启动文件中定义的CATALINA_OPTS选项中的值。要增加PermGen内存,请更改MaxPermSize变量的值,否则请更改Xmx变量的值。 Linux和Mac OS:打开或创建位于“bin”目录中的setenv.sh文件。您需要将更改应用于此行:
export CATALINA_OPTS="$CATALINA_OPTS -server -Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m"

Windows:

打开或创建位于“bin”目录中的setenv.bat文件:

set CATALINA_OPTS=-server -Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m

51
实际上,建议的设置方式是创建一个 setenv.bat(Windows)或 setenv.sh(*nix)文件并将条目放入其中,Tomcat 将会识别这些条目,这样更易于管理升级。 - Steve
有很多类似的答案,但我发现这个表述最清晰、最简单,非常有帮助。 - Jeremy
1
为什么改变Xmx会增加PermGen? - amdev

21
不要将环境配置放在catalina.bat / catalina.sh中。相反,您应该创建一个新文件在CATALINA_BASE \ bin \ setenv.bat中,以使您的自定义与tomcat安装分开存放。

我提交了一份编辑,将此内容添加到被接受的答案中。 - Mr. Lance E Sloan

1

关于“-XX:MaxPermSize=512m”,您正在做正确的事情:这确实是正确的语法。您可以尝试直接将这些选项设置到Catalyna服务器文件中,以便在服务器启动时使用。

也许这篇文章会对您有所帮助!

如何确保Tomcat6在Windows上读取CATALINA_OPTS?


我正在使用Linux。但我会阅读并查看它的工作原理。非常感谢您的回复。 :3 - 황현정

-1

完全从Java 8+中移除
部分从Java 7中移除(例如interned字符串)
source


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接