Where to set java heap options (e.g. -Xmx) for Tomcat 6 under Ubuntu 9.04?

142,970

Solution 1

At least on Ubuntu 10.04, /etc/init.d/tomcat6 sources /etc/default/tomcat6 if it exists. That's where I put my overrides, and I believe it's generally the "approved" way to make such changes.

Solution 2

If you look in your installation's bin directory you will see catalina.sh or .bat scripts. If you look in these you will see that they run a setenv.sh or setenv.bat script respectively, if it exists, to set environment variables. The relevant environment variables are described in the comments at the top of catalina.sh/bat. To use them create, for example, a file $CATALINA_HOME/bin/setenv.sh with contents

export JAVA_OPTS="-server -Xmx512m"

For Windows you will need, in setenv.bat, something like

set JAVA_OPTS=-server -Xmx768m

This is true from tomcat 5.5 through 7. Original answear https://stackoverflow.com/questions/286007/how-to-tune-tomcat-5-5-jvm-memory-settings-without-using-the-configuration-progra

Solution 3

Look for /etc/tomcat6/tomcat6.conf which has the likes of JAVA_OPTS ready and waiting for you to uncomment (but only if you have it at all, I'm using Centos not Ubuntu).

# System-wide configuration file for tomcat6 services
# This will be sourced by tomcat6 and any secondary service
# Values will be overridden by service-specific configuration
# files in /etc/sysconfig
#
# Use this one to change default values for all services
# Change the service specific ones to affect only one service
# (see, for instance, /etc/sysconfig/tomcat6)
#
...
#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3"

Solution 4

The most elegant way I've found so far is to edit /etc/init.d/tomcat6 and add this at the top of the file:

# local config settings
JAVA_OPTS="-Xms5000m -Xmx13000m

The other options I outlined in my question don't seem to work. After studying the script and experimenting some more, I now doubt that /usr/share/tomcat6/bin/catalina.sh and /usr/share/tomcat6/bin/startup.sh play any role in tomcat startup with the tomcat6 Ubuntu package. Instead; the /etc/init.d/tomcat6 completely replaces any work that might normally be done by catalina.sh/startup.sh.

I'm still a little worried about losing these config options in some future package update, but I guess if that happens it'd be pretty easy to restore them.

Share:
142,970

Related videos on Youtube

Chris
Author by

Chris

Updated on September 17, 2022

Comments

  • Chris
    Chris over 1 year

    I'm running Tomcat using the tomcat6 package from Ubuntu 9.04, which makes a daemon out of Tomcat using jsvc. I'd like to know the proper way to set Java heap options like -Xmx for Tomcat. I'd like to put the configuration wherever is most stylistically correct, and wherever is least likely to be overwritten by Ubuntu package updates.

    The options I see right now:

    • Hard-code them somewhere in /etc/init.d/tomcat6.
    • Hard-code them somewhere in /usr/share/tomcat6/bin/catalina.sh.
    • Create a line in /usr/share/tomcat6/bin/startup.sh to set CATALINA_OPTS to have the desired flags, and then export CATALINA_OPTS as an environment variable. (This looks like it will get picked up by catalina.sh.)

    The last option sounds like the best one, and it's advocated (without explanation of why) at Increasing Java's heapspace in Tomcat startup script. But I wanted to get a second opinion. Anyone want to confirm that there isn't a better way?

  • David J. Liszewski
    David J. Liszewski almost 14 years
    Can this be set (exported) in the .bashrc for whatever user you want tomcat to run as ? [please excuse horrid grammar] That would survive updates to Tomcat package, etc. I'm assuming the "run-as" facility in init will start normal shell for that user and pick up the assignment. See also howtogeek.com/howto/linux/installing-tomcat-6-on-ubuntu
  • Amala
    Amala almost 13 years
    /etc/default/tomcat6 is the proper place
  • Marcus Downing
    Marcus Downing over 11 years
    +1 Configuration should always be done in /etc if possible.
  • jokokojote
    jokokojote over 11 years
    On CentOS, the location I found was /etc/tomcat6/tomcat6.conf
  • vadipp
    vadipp about 11 years
    Works well for systems without the /etc/default/ include, e.g, FreeBSD.
  • Dawngerpony
    Dawngerpony over 10 years
    On CentOS 6.4, /etc/tomcat6/tomcat6.conf is a large file and I didn't want to put my personal customizations in there, so I created $CATALINA_HOME/bin/setenv.sh and sourced it in /usr/sbin/tomcat6. Hope this helps CentOS users (yes, I know the original question was for Ubuntu).
  • Eran Medan
    Eran Medan about 10 years
    This seems to be correct for CentOS / yum / RPM version of tomcat. For the Ubuntu / apt-get package the setenv.sh is the right way to go AFAIK
  • Eran Medan
    Eran Medan about 10 years
    @khylo yep, took me a little while to figure it out. seems in CentOS the /etc/init.d/tomcat6 is calling /usr/sbin/tomcat6 which is NOT calling catalina.sh but simply calls the tomcat bootstrap class directly (as opposed to the Ubuntu /etc/init.d/tomcat6 that is calling catalina.sh)
  • SiKing
    SiKing about 9 years
    Works on Debian too, even after all this time!
  • Manikandan Arunachalam
    Manikandan Arunachalam over 8 years
    yes, KCD is correct, for centOS tomcat6.conf works well. Checked with the command ps aux | grep tomcat it shows the parameter with the values i set.