Tomcat – Java.Lang.OutOfMemoryError: PermGen Space
在tomcat\bin文件中创建setenv.sh文件,内容如下:
export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m"
很多时候,在开发阶段Tomcat重复的重启过程中会遇到java.lang.OutOfMemoryError : PermGen space 错误。
1
2
3
4
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:
620
)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:
124
)
怎么解决这种问题呢?
默认情况下,在程序运行中Tomcat只分配了非常小的PermGen内存, 因此需要增加PermGen内存,你可以通过下面的Java VM选项设置。
1
2
-XX:PermSize<size> - Set initial PermGen Size.
-XX:MaxPermSize<size> - Set the maximum PermGen Size.
换成Tomcat,该怎么设置呢? 接下来告诉你如果在Windows和Linux环境下,通过Tomcat来设置这些VM选项。
Windows
Tomcat是由脚本catalina.bat来管理的。深入到脚本里面,你会发现catalina.bat会去查找并且运行setenv.bat文件。这个文件就是用来设置环境变量的。
1
2
3
4
5
6
7
8
9
10
//{$tomcat-folder}\bin\catalina.bat
//...
rem Get standard environment variables
if
not exist
"%CATALINA_BASE%\bin\setenv.bat"
goto
checkSetenvHome
call
"%CATALINA_BASE%\bin\setenv.bat"
goto
setenvDone
:checkSetenvHome
if
exist
"%CATALINA_HOME%\bin\setenv.bat"
call
"%CATALINA_HOME%\bin\setenv.bat"
:setenvDone
//...
在Windows中设置环境,你需要手工创建setenv.bat文件,然后把它放在${tomcat-folder}\bin 目录下面。
1
2
//${tomcat-folder}\bin\setenv.bat
set JAVA_OPTS=-Dfile.encoding=UTF-
8
-Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m
注意:这里的JAVA_OPTS={value}没有双引号。
重启tomcat,它会自动调用setenv.bat文件来设置这些环境变量。
1
{$tomcat-folder}\bin\catalina.bat restart
Linux
Linux平台下原理是一样的, 只是文件变成了catalina.sh 和 setenv.sh.
找到catalina.sh文件, 如果你不知道放在什么目录, 那么全盘扫描一下:
1
2
3
4
5
6
catalina.sh
$ sudo find / -name
"catalina.sh"
Password:
find: /dev/fd/
3
: Not a directory
find: /dev/fd/
4
: Not a directory
/Users/mkyong/Downloads/apache-tomcat-
6.0
.
35
/bin/catalina.sh
你会看到和Windows下类似的代码:
1
2
3
4
5
6
7
8
9
10
11
//...
# Ensure that any user defined CLASSPATH variables are not used on startup,
# but allow them to be specified in setenv.sh, in rare
case
when it is needed.
CLASSPATH=
if
[ -r
"$CATALINA_BASE/bin/setenv.sh"
]; then
.
"$CATALINA_BASE/bin/setenv.sh"
elif [ -r
"$CATALINA_HOME/bin/setenv.sh"
]; then
.
"$CATALINA_HOME/bin/setenv.sh"
fi
//...
创建setenv.sh,把它放在${tomcat-folder}\bin\}目录下, 文件的内容是:
1
export JAVA_OPTS=
"-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m"
注意:这里和Windows有细微区别,这里的value是有双引号的export JAVA_OPTS=”{value}”。
重启Tomcat。
注意:我这里设置的Perm Gen大小仅仅是示例,你需要根据自己的项目需要来调整他们的值。
原文链接: mkyong 翻译: ImportNew.com - 刘志军
译文链接: http://www.importnew.com/10427.html
[ 转载请保留原文出处、译者和译文链接。]
转载于:https://my.oschina.net/u/725026/blog/801119
推荐阅读
-
eclipse打开提示PermGen space异常该怎么办?
-
java中程序上线报错: tomcat中java.lang.OutOfMemoryError: PermGen space
-
Tomcat同时部署多个应用——内存溢出(java.lang.OutOfMemoryError: PermGen space)的解决办法
-
java.lang.OutOfMemoryError: PermGen space及其解决方法
-
ES内存溢出,报错:java.lang.OutOfMemoryError: Java heap space
-
java.lang.OutOfMemoryError: Java heap space 解决方法
-
java.lang.OutOfMemoryError: Java heap space解决方案
-
java.lang.OutOfMemoryError: Java heap space解决方法:即就该内存大小
-
java.lang.OutOfMemoryError: Java heap space 报错实例
-
java.lang.OutOfMemoryError: Java heap space