Personalizar variables de arranque de Java en Apache-Tomcat

En muchas ocasiones utilizamos instancias de Apache-Tomcat en las que utilizamos las variables JAVA_OPTS con valores similares. Para poder configurar esta parte de la instalación podemos usar un fichero que generalmente no viene creado dentro del propio Apache-Tomcat pero que, si es encontrado se usa, llamado setenv.sh (sistemas unix) o setenv.bat (sistemas windows). De esta forma podemos pasar este fichero entre nuestras distintas instalaciones con unas básicas modificaciones.

El fichero que uso actualmente para mis instalaciones de Alfresco bajo Apache-Tomcat contiene las variables necesarias para optimizar el funcionamiento de la JVM de Sun.

Aquí está el contenido de dicho fichero con sus respectivos comentarios:

# Entorno de ejecución
# 9/06/2009 (Fernando González)

# Variables
LD_LIBRARY_PATH=/usr/local/apr/lib
JAVA_HOME=”/opt/java64/jdk1.6.0_14″
JRE_HOME=”${JAVA_HOME}/jre”
CATALINA_HOME=”/opt/alfresco/tomcat5525alfresco320″
CATALINA_BASE=”${CATALINA_HOME}”
GC_LOG=”${CATALINA_HOME}/logs/gc.log”
CATALINA_TMPDIR=”${CATALINA_HOME}/temp”
ALFRESCO_HOME=”${CATALINA_HOME}”

JAVA_OPTS=””
JAVA_OPTS=”-Djava.library.path=/usr/local/apr/lib”

# Server Hotspot VM
JAVA_OPTS=”${JAVA_OPTS} -server”

# Modelo de datos de x bits -d32/-d64
JAVA_OPTS=”${JAVA_OPTS} -d64″

# Heap Size
JAVA_OPTS=”$JAVA_OPTS -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=31″
JAVA_OPTS=”${JAVA_OPTS} -Xms512m -Xmx640m”
JAVA_OPTS=”${JAVA_OPTS} -Xss128k”

# Perm Size – Total permanent generation
JAVA_OPTS=”${JAVA_OPTS} -XX:PermSize=128m -XX:MaxPermSize=128m”

# Young Generation
JAVA_OPTS=”${JAVA_OPTS} -XX:+UseParNewGC”

# Old Generation – Low Pause Collector (default: Mark-Compact Collector)
JAVA_OPTS=”${JAVA_OPTS} -XX:+UseConcMarkSweepGC”

# Permanent Generation – Compact Mark Sweeping Collector
JAVA_OPTS=”${JAVA_OPTS} -XX:+CMSClassUnloadingEnabled”

# Intervalo en milisegundos para GC
JAVA_OPTS=”${JAVA_OPTS} -Dsun.rmi.dgc.server.gcInterval=3600000 -Dsun.rmi.dgc.client.gcInterval=3600000″

# Codificación
JAVA_OPTS=”${JAVA_OPTS} -Dfile.encoding=UTF-8″

# Log para acciones de GC
CATALINA_OPTS=”${CATALINA_OPTS} -Xloggc:${GC_LOG}”

# Sincronización basada en hilo LWP
CATALINA_OPTS=”${CATALINA_OPTS} -Xconcurrentio”

# Comprobaciones adicionales
CATALINA_OPTS=”${CATALINA_OPTS} -Xcheck:jni”

# Monitorización JMX
CATALINA_OPTS=”${CATALINA_OPTS} -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=$JAVA_HOME/jre/lib/management/jmxremote.access”

# Parámetros para Alfresco desde java
JAVA_OPTS=”${JAVA_OPTS} -Dalfresco.home=${ALFRESCO_HOME}”

7 replies on “Personalizar variables de arranque de Java en Apache-Tomcat”

  1. zemby dice:

    Un hombre de palabra, sí señor. ¡Gracias por el post!

  2. Fegoooorr !!

    También podemos agregar un parámetros para machotes de pelo en pecho !!

    -XX:+AggressiveHeap

    Este se recomienda en entornos donde la Heap es muy grande.

    Eres GRANDE maestro

  3. En la version 4 de Alfresco se debe modificar el archivo tomcat/scripts/ctl.sh

  4. Efectivamente Benjamín, por defecto, si usas el instalable de Alfresco, este crea scripts de arranque para cada servicio incluido el suyo propio, por tanto es ahí donde se pueden modificar las variables de entorno.

  5. Hoa FEGOR,
    muchas gracias por el blog.

    Tenemos en nuestro entorno de producción un alfresco, que constantemente está dando errores de memoria y creo que no está bien configurado.
    Por favor, me podrías ayudar ???

    Alfresco
    Versión: Enterprise Network – v2.2.3

    RAM: 16 GB

    JAVA_OPTS: -server -Xss2m -Xms4196m -Xmx8192m -XX:MaxPermSize=1G -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -XX:+DisableExplicitGC -XX:+UseParallelGC -XX:ParallelGCThreads=8

    java.lang.OutOfMemoryError: Java heap space

  6. Hola, en este blog no doy soporte sobre Alfresco directamente, pero antes de nada hay que saber que versión de Java estás usando, que sistema operativo así como su arquitectura. Luego monitorizar al menos con JConsole la actividad que tiene hasta que se produce el “Out of memory” y finalmente actuar y poner las variables o parámetros necesarios y volver a empezar.

    Además esa versión de Alfresco queda ya fuera del soporte de la propia compañía creo recordar.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *