CATALINA_OPTS vs JAVA_OPTS - What is the difference?

java, jvm, tomcat, tomcat6

Solution

There are two environment variables - `CATALINA_OPTS` and `JAVA_OPTS` - which are both used in the `catalina.sh` startup and shutdown script for Tomcat.

CATALINA_OPTS: Comment inside catalina.sh:

#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   "run" or "debug" command is executed.
#                   Include here and not in JAVA_OPTS all options, that should
#                   only be used by Tomcat itself, not by the stop process,
#                   the version command etc.
#                   Examples are heap size, GC logging, JMX ports etc.

JAVA_OPTS: Comment inside catalina.sh:

#   JAVA_OPTS       (Optional) Java runtime options used when any command
#                   is executed.
#                   Include here and not in CATALINA_OPTS all options, that
#                   should be used by Tomcat and also by the stop process,
#                   the version command etc.
#                   Most options should go into CATALINA_OPTS.

So why are there two different variables? And what's the difference?

Firstly, anything specified in EITHER variable is passed, identically, to the command that starts up Tomcat - the `start` or `run` command - but only values set in `JAVA_OPTS` are passed to the `stop` command. That probably doesn't make any difference to how Tomcat runs in practice as it only effects the END of a run, not the start.

The second difference is more subtle. Other applications may also use `JAVA_OPTS`, but only Tomcat will use `CATALINA_OPTS`. So if you're setting environment variables for use only by Tomcat, you'll be best advised to use `CATALINA_OPTS`, whereas if you're setting environment variables to be used by other java applications as well, such as by JBoss, you should put your settings in `JAVA_OPTS`.

Source: CATALINA_OPTS v JAVA_OPTS - What is the difference?

Problem

I was trying to find out the difference between Apache Tomcat variables - `CATALINA_OPTS` and `JAVA_OPTS` in SO and surprised to see that there is no question/answer posted here yet. So I thought of sharing it here (with answer) after finding out the difference. Check the answer/difference below. NOTE: At the time of this posting, we're running Apache Tomcat v6.0.10 with JDK 6u32 on CentOS5 64-bit arch.

Original source