CATALINA_OPTS vs JAVA_OPTS - В чем разница?

105

Я пытался выяснить разницу между переменными Apache Tomcat - CATALINA_OPTSи JAVA_OPTSв SO и удивился, увидев, что здесь еще нет вопросов / ответов. Поэтому я подумал поделиться им здесь (с ответом) после того, как узнал разницу. Проверьте ответ / разницу ниже.

ПРИМЕЧАНИЕ. На момент публикации мы использовали Apache Tomcat v6.0.10 с JDK 6u32 на 64-битной архитектуре CentOS5.

Гнанам
источник

Ответы:

156

Есть две переменные среды - CATALINA_OPTSи JAVA_OPTS-, которые используются в сценариях запуска и завершения работы catalina.sh для Tomcat. Они описаны в комментариях к этому файлу как:

[JAVA_OPTS]: (необязательно) параметры среды выполнения Java, используемые при выполнении команды «start», «stop» или «run»

и

[CATALINA_OPTS]: (необязательно) параметры среды выполнения Java, используемые при выполнении команды "start" или "run"

Итак, почему есть две разные переменные? А какая разница?

Во-первых, все, что указано в переменной EITHER, идентично передается команде, запускающей Tomcat - команда «start» или «run», но только значения, установленные в JAVA_OPTS, передаются команде «stop». Это, вероятно, не имеет никакого значения для того, как Tomcat работает на практике, поскольку влияет только на конец выполнения, но не на начало.

Второе отличие более тонкое. Другие приложения также могут использовать JAVA_OPTS, но только Tomcat будет использовать CATALINA_OPTS. Поэтому, если вы устанавливаете переменные среды для использования только Tomcat, вам лучше всего рекомендуется использовать CATALINA_OPTS, тогда как если вы устанавливаете переменные среды, которые также будут использоваться другими приложениями Java, такими как JBoss, вы должны поставить ваши настройки в JAVA_OPTS.

Источник: CATALINA_OPTS v JAVA_OPTS - В чем разница?

Гнанам
источник
11
Также полезно думать о них как о «нужно ли мне что-то для запуска tomcat» или «нужно ли мне что-то для каждой JVM». Допустим, мы пытаемся настроить JMX-мониторинг в распределенной среде и находимся за брандмауэром - нам понадобятся два порта RMI, чтобы настроить Djava.rmi.server в качестве аргумента запуска . Сделаем ли мы это как JAVA_OPT, при завершении работы запускается новая JVM, которая пытается прослушивать порты JMX, не может захватить ее, поскольку tomcat уже прослушивает ее, и JVM остановится с ошибкой о том, что она уже используется - не то, что мы хочу это?
Жоао Фигейредо