Tomcat – java.lang.OutOfMemoryError:PermGenスペース
多くの場合、Tomcatは以下の `java.lang.OutOfMemoryError:PermGen space`エラーに遭遇することがあります。
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が数回再起動した後に起こります。
1.解決策
デフォルトでは、Tomcatには実行中のプロセスに対してPermGenメモリがほとんど割り当てられていません。これを修正するには、次のJava VMオプションを使用してPermGenのメモリ設定を増やします。
-XX:PermSize<size> - Set initial PermGen Size. -XX:MaxPermSize<size> - Set the maximum PermGen Size.
次のステップでは、WindowsおよびLinux環境下でTomcatでVMオプションを設定する方法を説明します。
2. Windows
Tomcatはこのスクリプトファイル
catalina.bat`によって管理され、スクリプトの中で潜んでいます。
catalina.bat`は常に `setenv.bat`ファイルを見つけて実行して環境変数を設定します。
\ {$ 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//…
2.1 Windowsで環境変数を設定するには、 `setenv.bat`を手作業で作成し、` $ {tomcat-folder} \ bin`フォルダに入れてください。 $ \ {tomcat-folder} \ bin \ setenv.bat
set JAVA__OPTS=-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m
__P.S二重引用符は使用されず、JAVA__OPTS = \ {value} .__ 2.2 Tomcatを再起動すると、環境変数を自動的に設定する `setenv.bat`ファイルが呼び出されます。
{$tomcat-folder}\bin\catalina.bat restart
=== 3. Linux Linuxでは、プロセスは同じです。ちょうどTomcatが代わりに `catalina.sh`と` setenv.sh`を使用しています。 3.1 `catalina.sh`がどこにあるか調べる: 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
3.2 `catalina.sh`スクリプトを見直してください。これはWindowsのように動作しますが、代わりに` setenv.sh`を使用してください。 ....//... # 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//...
3.3
setenv.sh`を手作業で作成し、
$ {tomcat-folder} \ bin \ `フォルダに入れます。
$ \ {tomcat-folder} \ bin \ setenv.sh
export JAVA__OPTS="-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m"
P.S二重引用符で、JAVA
OPTS = “\ {value}”をエクスポートします。
3.4 Tomcatを再起動します。
参考文献
Tomcatのメモリ設定]。
https://blogs.oracle.com/jonthecollector/entry/presenting
the
permanent__generation[Oracle
: Presenting the Permanent Generation].
https://blog.codecentric.de/en/2012/08/useful-jvm-flags-part-5-young-generation-garbage-collection/
[Useful
JVMフラグ – 第5部(若い世代のガベージコレクション)]。リンク://tomcat/how-to-install-tomcat-in-ubuntu/[Tomcatのインストール方法
Ubuntuで]。 link://java/find-out-your-java-heap-memory-size/[あなたのJavaを見つける
ヒープメモリサイズ]