Hibernate e Tomcat out of memory
DOMANDA:
Sto utilizzando Hibernate sulla mia web application. Dopo un po' che navigo ed effettuo query, il server Tomcat 7 smette di funzionare e ricevo questo errore:
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)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
Come posso risolverlo?
RISPOSTA:
L'accoppiata Tomcat e Hibernate funziona molto bene, ma, come tutti i framework/applicazioni installati sul web server richiede alcune piccole configurazioni per settare tutto al meglio.
Come impostazione predefinita, Tomcat assegna pochissima memoria per i processi in esecuzione. E' proprio quello il problema, poca memoria a disposizione e il nostro framework (in questo caso Hibernate) ne richiede di più.
Vediamo come aumentarla.
In Linux:
1. Cerchiamo il file catalina.sh nella cartella di installazione di Tomcat \bin\catalina.sh
2. Aggiungiamo queste righe di codice che impostano le JAVA_OPT in catalina.sh
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8
-server -Xms1536m -Xmx1536m
-XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m
-XX:MaxPermSize=256m -XX:+DisableExplicitGC"
-server -Xms1536m -Xmx1536m
-XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m
-XX:MaxPermSize=256m -XX:+DisableExplicitGC"
Un esempio di come apparirà il file catalina.sh:
# JSSE_HOME (Optional) May point at your Java Secure Sockets Extension
# (JSSE) installation, whose JAR files will be added to the
# system class path used to start Tomcat.
#
# CATALINA_PID (Optional) Path of the file which should contains the pid
# of catalina startup java process, when start (fork) is used
#
# $Id: catalina.sh 609438 2008-01-06 22:14:28Z markt $
# -----------------------------------------------------------------------------
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m
-Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m
-XX:MaxPermSize=256m -XX:+DisableExplicitGC"
# OS specific support. $var _must_ be set to either true or false.
cygwin=false
os400=false
darwin=false
case "`uname`" in
CYGWIN*) cygwin=true;;
OS400*) os400=true;;
Darwin*) darwin=true;;
esac
# resolve links - $0 may be a softlink
PRG="$0"
...
...
# (JSSE) installation, whose JAR files will be added to the
# system class path used to start Tomcat.
#
# CATALINA_PID (Optional) Path of the file which should contains the pid
# of catalina startup java process, when start (fork) is used
#
# $Id: catalina.sh 609438 2008-01-06 22:14:28Z markt $
# -----------------------------------------------------------------------------
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m
-Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m
-XX:MaxPermSize=256m -XX:+DisableExplicitGC"
# OS specific support. $var _must_ be set to either true or false.
cygwin=false
os400=false
darwin=false
case "`uname`" in
CYGWIN*) cygwin=true;;
OS400*) os400=true;;
Darwin*) darwin=true;;
esac
# resolve links - $0 may be a softlink
PRG="$0"
...
...
3. Riavviamo Tomcat e non dovrebbero esserci più problemi (nel caso modificate i valori di "Xms" e "PermSize" in base alle vostre esigenze)
In Windows:
1a. Tramite editor visuale (apriamolo da Start -> Programmi -> Apache Software Foundation -> Apache Tomcat 7.0 -> Configure Tomcat oppure da riga di comando dalla cartella bin di Tomcat: tomcat7w.exe //ES//tomcat) impostiamo i due valori Initial Memory Pool a 512 e Maximum Memory Pool a 1024 come in figura:
Pannello di configurazione di Tomcat 7 |
1b. (procedura alternativa) Da riga di comando dalla cartella bin di Tomcat:
tomcat7 //US//Tomcat7 --JvmMx 1024 ++JvmOptions="-XX:MaxPermSize=256m"
2. Riavviamo Tomcat e non dovrebbero esserci più problemi (nel caso modificate i valori di Initial e Maximum memory pool oppure di "Xms" e "PermSize" in base alle vostre esigenze)
Commenti
Posta un commento