Tomcat - java.lang.OutOfMemoryError: espace PermGen
Souvent, Tomcat peut rencontrer l'erreurjava.lang.OutOfMemoryError: PermGen space
suivante.
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)
Cela se produit généralement après le redémarrage du Tomcat à quelques reprises.
1. Solution
Par défaut, Tomcat se voit attribuer une très petite mémoire PermGen pour le processus en cours. Pour résoudre ce problème, augmentez les paramètres de mémoire PermGen à l'aide des options Java VM suivantes.
-XX:PermSize- Set initial PermGen Size. -XX:MaxPermSize - Set the maximum PermGen Size.
Dans l'étape suivante, nous vous montrerons comment définir les options de VM dans Tomcat, sous environnement Windows et Linux.
2. les fenêtres
Tomcat est géré par ce fichier scriptcatalina.bat
, plongez dans le script, vous découvrirez quecatalina.bat
trouve et exécute toujours le fichiersetenv.bat
pour définir les variables d'environnement.
\{$tomcat-folder}in\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 To set the environment variable on Windows, create a setenv.bat
manually, and put it into the ${tomcat-folder}in
folder.
${tomcat-folder}in\setenv.bat
set JAVA_OPTS=-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m
P.S No double quotes, set JAVA_OPTS={value}.
2.2 Restart Tomcat, it will call the setenv.bat
file to set the environment variable automatically.
{$tomcat-folder}\bin\catalina.bat restart
3. Linux
Sous Linux, le processus est le même, seul Tomcat utilisecatalina.sh
etsetenv.sh
à la place.
3.1 Find out where is 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/example/Downloads/apache-tomcat-6.0.35/bin/catalina.sh
3.2 Review the catalina.sh
, script, it behaves like Windows, but use setenv.sh
instead.
//... # 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 Create a setenv.sh
manually, and put it into the ${tomcat-folder}in\
folder.
${tomcat-folder}in\setenv.sh
export JAVA_OPTS="-Dfile.encoding=UTF-8 -Xms128m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=256m"
P.S With double quotes, export JAVA_OPTS=”{value}”.
3.4 Restart Tomcat.
Note
La valeur de la taille du tas et de la taille non-tas (perm gen) est juste un exemple, vous devriez changer la valeur en conséquence pour répondre aux besoins de votre projet.