CATALINA_OPTS vs JAVA_OPTS - Qual é a diferença?

105

Eu estava tentando descobrir a diferença entre as variáveis ​​do Apache Tomcat - CATALINA_OPTSe JAVA_OPTSno SO, e fiquei surpreso ao ver que ainda não havia nenhuma pergunta / resposta postada aqui. Então pensei em compartilhar aqui (com resposta) depois de descobrir a diferença. Verifique a resposta / diferença abaixo.

NOTA: No momento desta postagem, estamos executando o Apache Tomcat v6.0.10 com JDK 6u32 em CentOS5 de 64 bits.

Gnanam
fonte

Respostas:

156

Existem duas variáveis ​​de ambiente - CATALINA_OPTSe JAVA_OPTS- que são usadas no script de inicialização e desligamento catalina.sh para Tomcat. Eles são descritos nos comentários desse arquivo como:

[JAVA_OPTS]: (opcional) opções de tempo de execução Java usadas quando o comando "start", "stop" ou "run" é executado

e

[CATALINA_OPTS]: (opcional) opções de tempo de execução Java usadas quando o comando "start" ou "run" é executado

Então, por que existem duas variáveis ​​diferentes? E qual é a diferença?

Em primeiro lugar, qualquer coisa especificada em QUALQUER variável é passada, de forma idêntica, para o comando que inicia o Tomcat - o comando "iniciar" ou "executar" - mas apenas os valores definidos em JAVA_OPTS são passados ​​para o comando "parar". Isso provavelmente não faz nenhuma diferença em como o Tomcat é executado na prática, pois ele afeta apenas o final da execução, não o início.

A segunda diferença é mais sutil. Outros aplicativos também podem usar JAVA_OPTS, mas apenas o Tomcat usará CATALINA_OPTS. Portanto, se você estiver definindo variáveis ​​de ambiente para uso apenas por Tomcat, será melhor usar CATALINA_OPTS, enquanto se estiver definindo variáveis ​​de ambiente para serem usadas por outros aplicativos Java também, como por JBoss, você deve colocar suas configurações em JAVA_OPTS.

Fonte: CATALINA_OPTS v JAVA_OPTS - Qual é a diferença?

Gnanam
fonte
11
Também é útil pensar neles como "preciso de algo para a inicialização do tomcat" ou "preciso de algo para cada JVM". Digamos que estejamos tentando configurar o monitoramento JMX em um ambiente distribuído e estamos atrás de um firewall - precisaremos de duas portas RMI para configurar Djava.rmi.server como um argumento de inicialização . Faríamos isso como um JAVA_OPT um desligamento dispara uma nova JVM que tenta escutar nas portas JMX, não pode pegá-lo porque o tomcat já o tem escutando e o JVM irá parar com um erro sobre ele já estar em uso - não o que nós quer é isso?
João Figueiredo