CATALINA_OPTS vs JAVA_OPTS - ¿Cuál es la diferencia?

105

Estaba tratando de averiguar la diferencia entre las variables de Apache Tomcat, CATALINA_OPTSy JAVA_OPTSen SO, y me sorprendió ver que todavía no hay preguntas / respuestas publicadas aquí. Así que pensé en compartirlo aquí (con respuesta) después de descubrir la diferencia. Verifique la respuesta / diferencia a continuación.

NOTA: En el momento de esta publicación, estamos ejecutando Apache Tomcat v6.0.10 con JDK 6u32 en el arco CentOS5 de 64 bits.

Gnanam
fuente

Respuestas:

156

Hay dos variables de entorno, CATALINA_OPTSy JAVA_OPTS, que se utilizan en el script de inicio y cierre de catalina.sh para Tomcat. Se describen en los comentarios dentro de ese archivo como:

[JAVA_OPTS]: (opcional) Opciones de tiempo de ejecución de Java que se utilizan cuando se ejecuta el comando "iniciar", "detener" o "ejecutar"

y

[CATALINA_OPTS]: (opcional) Opciones de tiempo de ejecución de Java utilizadas cuando se ejecuta el comando "iniciar" o "ejecutar"

Entonces, ¿por qué hay dos variables diferentes? Y cual es la diferencia?

En primer lugar, cualquier cosa especificada en CUALQUIER variable se pasa, de manera idéntica, al comando que inicia Tomcat, el comando "iniciar" o "ejecutar", pero solo los valores establecidos en JAVA_OPTS se pasan al comando "detener". Eso probablemente no hace ninguna diferencia en la forma en que Tomcat se ejecuta en la práctica, ya que solo afecta el final de una ejecución, no el inicio.

La segunda diferencia es más sutil. Otras aplicaciones también pueden usar JAVA_OPTS, pero solo Tomcat usará CATALINA_OPTS. Por lo tanto, si está configurando variables de entorno para que las use solo Tomcat, es mejor que use CATALINA_OPTS, mientras que si está configurando variables de entorno para que las utilicen otras aplicaciones Java, como JBoss, debe poner su configuración en JAVA_OPTS.

Fuente: CATALINA_OPTS v JAVA_OPTS - ¿Cuál es la diferencia?

Gnanam
fuente
11
También es útil pensar en ellos como "necesito algo para el inicio de Tomcat" o "necesito algo para cada JVM". Digamos que estamos tratando de configurar la supervisión JMX en un entorno distribuido y estamos detrás de un firewall; necesitaremos dos puertos RMI para configurar Djava.rmi.server como un argumento de inicio . ¿Haríamos esto como un JAVA_OPT? Un apagado dispara una nueva JVM que intenta escuchar en los puertos JMX, no puede agarrarla porque tomcat ya la tiene escuchando y la JVM se detendrá con un error sobre que ya está en uso, no lo que nosotros ¿quieres?
Joao Figueiredo