CATALINA_OPTS vs JAVA_OPTS - Jaka jest różnica?

105

Próbowałem znaleźć różnicę między zmiennymi Apache Tomcat - CATALINA_OPTSa także JAVA_OPTSw SO i byłem zaskoczony, widząc, że nie ma tu jeszcze żadnego pytania / odpowiedzi. Pomyślałem więc o udostępnieniu go tutaj (z odpowiedzią) po odkryciu różnicy. Sprawdź odpowiedź / różnicę poniżej.

UWAGA: w momencie publikowania tego postu używamy Apache Tomcat 6.0.10 z JDK 6u32 na 64-bitowym arch CentOS5.

Gnanam
źródło

Odpowiedzi:

156

Istnieją dwie zmienne środowiskowe - CATALINA_OPTSi JAVA_OPTS-, które są używane w skrypcie uruchamiania i zamykania catalina.sh dla serwera Tomcat. Są one opisane w komentarzach w tym pliku jako:

[JAVA_OPTS]: (opcjonalne) opcje środowiska wykonawczego Java używane podczas wykonywania polecenia „start”, „stop” lub „uruchom”

i

[CATALINA_OPTS]: (opcjonalne) opcje środowiska wykonawczego Java używane podczas wykonywania polecenia „start” lub „uruchom”

Dlaczego więc istnieją dwie różne zmienne? Jaka jest różnica?

Po pierwsze, wszystko, co określono w KAŻDEJ zmiennej, jest przekazywane identycznie do polecenia uruchamiającego Tomcata - polecenia „start” lub „uruchom” - ale tylko wartości ustawione w JAVA_OPTS są przekazywane do polecenia „stop”. Prawdopodobnie nie ma to żadnego wpływu na to, jak Tomcat działa w praktyce, ponieważ wpływa tylko na koniec przebiegu, a nie na początek.

Druga różnica jest bardziej subtelna. Inne aplikacje mogą również używać JAVA_OPTS, ale tylko Tomcat będzie używać CATALINA_OPTS. Więc jeśli ustawiasz zmienne środowiskowe do użytku tylko przez Tomcat, najlepiej będzie używać CATALINA_OPTS, podczas gdy jeśli ustawiasz zmienne środowiskowe, które mają być używane również przez inne aplikacje Java, takie jak JBoss, powinieneś umieścić Twoje ustawienia w JAVA_OPTS.

Źródło: CATALINA_OPTS v JAVA_OPTS - Jaka jest różnica?

Gnanam
źródło
11
Warto też myśleć o nich w kategoriach „czy potrzebuję czegoś do uruchomienia tomcat” lub „czy potrzebuję czegoś do każdej maszyny JVM”. Powiedzmy, że próbujemy skonfigurować monitorowanie JMX w środowisku rozproszonym i jesteśmy za zaporą ogniową - będziemy więc potrzebować dwóch portów RMI, aby ustawić Djava.rmi.server jako argument startowy . Czy zrobilibyśmy to jako JAVA_OPT, a wyłączenie uruchamia nową maszynę JVM, która próbuje nasłuchiwać na portach JMX, nie może jej pobrać, ponieważ Tomcat już ją nasłuchuje, a JVM zatrzyma się z błędem, że jest już używana - nie to, co my chcesz to?
Joao Figueiredo,