本文由 ImportNew - 劉志軍 翻譯自 mkyong。歡迎加入翻譯小組。轉載請見文末要求。
很多時候,在開發階段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
[ 轉載請保留原文出處、譯者和譯文鏈接。]