Tomcat – Java.Lang.OutOfMemoryError: PermGen Space

在tomcat\bin文件中建立setenv.sh文件,内容以下:html

export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m"

 

不少时候,在开发阶段Tomcat重复的重启过程当中会遇到java.lang.OutOfMemoryError : PermGen space 错误。java

1apache

2tomcat

3spa

4翻译

java.lang.OutOfMemoryError: PermGen spacerest

        at java.lang.ClassLoader.defineClass1(Native Method)code

        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)htm

        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
转载请保留原文出处、译者和译文连接。]

相关文章
相关标签/搜索