2010-04-27 18 views
21

Hay muchas preguntas que hacen esta o una pregunta similar.Cómo aumentar el espacio de almacenamiento dinámico de Java para una aplicación de tomcat

Todos dan el comando que debe ejecutarse, lo que no entiendo es dónde escribo este comando. Quiero aumentar permanentemente el espacio de almacenamiento dinámico para mis aplicaciones de tomcat.

leí esta página http://javahowto.blogspot.com/2006/06/6-common-errors-in-setting-java-heap.html y dice en la sección Tomcat

Stop Tomcat server, set environment variable CATALINA_OPTS, and then restart Tomcat. Look at the file tomcat-install/bin/catalina.sh or catalina.bat for how this variable is used. For example,

set CATALINA_OPTS=-Xms512m -Xmx512m (Windows, no "" around the value)
export CATALINA_OPTS="-Xms512m -Xmx512m" (ksh/bash, "" around the value)
setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh/csh, "" around the value)

Así que sustituye la línea

set CATALINA_OPTS=

con

set CATALINA_OPTS=-Xms512m -Xmx512m

Pero todavía consigo el error .

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.OutOfMemoryError: Java heap space java.lang.reflect.Array.multiNewArray(Native Method) java.lang.reflect.Array.newInstance(Array.java:90) nom.tam.util.ArrayFuncs.newInstance(ArrayFuncs.java:1028) nom.tam.fits.ImageData.read(ImageData.java:259) nom.tam.fits.Fits.readHDU(Fits.java:573) controller.UploadServlet.retreiveFITSFileFields(UploadServlet.java:206) controller.ScanServerFiles.doPost(ScanServerFiles.java:39) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

+0

¿Qué error estás obteniendo? – laz

+0

@laz - He agregado el seguimiento de la pila – Ankur

Respuesta

7

Su cambio bien puede estar funcionando. ¿Su aplicación necesita mucha memoria? El rastreo de la pila muestra algunas características relacionadas con la imagen.

Supongo que el error ocurre de inmediato, con un archivo grande, o sucede más tarde después de varias solicitudes.

Si el error ocurre de inmediato, entonces se puede aumentar aún más la memoria, o investigar averiguar por qué se necesita tanta memoria para un archivo.

Si el error se produce después de varias peticiones, entonces usted podría tener una pérdida de memoria - donde los objetos no están siendo reclamados por el recolector de basura. El uso de una herramienta como JProfiler puede ayudarlo a controlar la cantidad de memoria utilizada por su máquina virtual y puede ayudarlo a ver qué está usando esa memoria y por qué los objetos no están siendo recuperados por el recolector de basura.

+5

Esta respuesta en realidad no responde a la pregunta de OP sobre * cómo * para aumentar el espacio de almacenamiento en java para una aplicación Tomcat? – 8bitjunkie

9

Antes que nada, no puede cambiar la configuración de memoria solo para una aplicación tomcat, sino para todas las instancias de tomcat.

Si está ejecutando tomcat desde la consola (usando startup.bat) necesitará editar catalina.bat y jugar con CATALINA_OPTS. Por ejemplo:

set CATALINA_OPTS=-Xms512m -Xmx512m 

Al reiniciar tomcat se aplicarán las nuevas configuraciones.

Si todavía está obteniendo OutOfMemoryError, necesita saber cuánta memoria necesita su aplicación en ese momento en particular (nom.tam.util.ArrayFuncs ...). Deberá optimizar la aplicación o simplemente aumentar la memoria proporcionada a tomcat.

+0

Estoy ejecutando tomcat en Windows y acabo de tomar los archivos tomcat y descomprimiéndolos. No instalé ningún servicio. – Ankur

22

Hay un mecanismo para hacerlo sin modificar ningún archivo que esté en la distribución. Puede crear un archivo por separado %CATALINA_HOME%\bin\setenv.bat o $CATALINA_HOME/bin/setenv.sh y colocar allí sus variables de entorno.Además, la configuración de memoria se aplican a la JVM, no Tomcat, así que me gustaría establecer la variable JAVA_OPTS lugar:

set JAVA_OPTS=-Xmx512m

+0

No puedo encontrar el archivo setenv.bat dentro de la carpeta bin en tomcat8 –

4
  • Abra la pestaña del servidor en Eclipse
  • clic derecho abierto
  • clic la configuración abierta lauch
  • Ir a los argumentos
  • Aquí puede añadir en argumentos de VM después refrendado

    -Xms64m -Xmx256m 
    
2

si está usando Windows, es muy simple. Simplemente diríjase a las variables de System Environnement (haga clic derecho en Computer> Properties> Advanced System Parameters> Environnement Variables); crea una nueva variable de sistema con nombre = CATALINA_OPTS y valor = -Xms512m -Xmx1024m. reinicia Tomcat y disfruta!

1

Debe agregar las siguientes líneas en su archivo catalina.sh.

export CATALINA_OPTS="-Xms512M -Xmx1024M" 

ACTUALIZACIÓN: catalina.sh contenido claramente dice -

Do not set the variables in this script. Instead put them into a script setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

para que pueda agregar más arriba en lugar setenv.sh (crear un archivo si no existe).

+2

Se recomienda que lo coloque en un archivo separado: bin/setenv.sh –

+0

+1 para poner esto en setenv.sh, por ejemplo en ubuntu, es posible que tiene /usr/share/tomcat7/bin/catalina.sh, y puede colocar esa sola línea para CATALINA_OPTS en /usr/share/tomcat7/bin/setenv.sh –

-1

puede configurar esto en catalina.sh como CATALINA_OPTS = -Xms512m -Xmx512m

Abra el archivo tomcat-dir/bin/catalina.sh y añadir siguiente línea en cualquier lugar -

CATALINA_OPTS="$CATALINA_OPTS -Xms1024m -Xmx3024m" 

y reinicio tu tomcat

Cuestiones relacionadas