開発者ドキュメント

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

JVMフラグ – 第5部(若い世代のガベージコレクション)]。リンク://tomcat/how-to-install-tomcat-in-ubuntu/[Tomcatのインストール方法

Ubuntuで]。 link://java/find-out-your-java-heap-memory-size/[あなたのJavaを見つける

ヒープメモリサイズ]

モバイルバージョンを終了