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
轉載請保留原文出處、譯者和譯文連接。]

相關文章
相關標籤/搜索