Skip to main content

Multiple Tomcat Instances on Single Machine

In this post we will see how to run multiple tomcat instances on a single machine and under a single user account.

tomcat

Setup


We already see how to run tomcat in Ubuntu machine in my previous blog (http://kmlsarwar.blogspot.com/2014/08/how-to-install-apache-tomcat-on-ubuntu.html).

Step One—Create folder

Create two folder named "tomcat-instance1" and "tomcat-instance2" anywhere, and copy conf, logs, temp, webapps and work  folder from CATALINA_HOME folder and change conf/server.xml file in tomcat-instance1 and tomcat-instance2. we need to change 3 port shutdown port, connector port and ajp port.



Shutdown port - this port is used for shutdown the tomcat. when we call the shutdown.sh script they send signal to shutdown port. this port listen by tomcat java process. if signal is received the that process then its cleanup and exit by itself.

Connector Port -This port is actual port to expose the application to outside client. 

AJP port - this port is used to apache httpd server  communicate to tomcat. this port used when we setup load balanced server.

See the sample server.xml file:

<server port="8005" shutdown="SHUTDOWN">
.....
 <connector connectiontimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectport="8443">

<connector port="8009" protocol="AJP/1.3" redirectport="8443">
</connector></connector></server>


So we change these three port to different number, because once this port is binded  then other process can't bind it again. so wee bind different port. 

So tomcat-instance1/conf/server.xml file i configured server port =8105, connector port = 8181, ajp port = 8109.

And tomcat-instance2/conf/server.xml file i configured server port =8205, connector port = 8282, ajp port = 8209


Step Two—Create Script

 

Now we create two script file for startup and shutdown the tomcat-instance1 and tomcat-instance2.

startup-instance1.sh
export CATALINA_BASE=/usr/local/tomcat/tomcat-instance1
cd $CATALINA_HOME/bin
./startup.sh


startup-instance2.sh
export CATALINA_BASE=/usr/local/tomcat/tomcat-instance2
cd $CATALINA_HOME/bin
./startup.sh



shutdown-instance1.sh
export CATALINA_BASE= /usr/local/tomcat/tomcat-instance1
cd $CATALINA_HOME/bin
./shutdown.sh

shutdown-instance2.sh
export CATALINA_BASE= /usr/local/tomcat/tomcat-instance2
cd $CATALINA_HOME/bin
./shutdown.sh

Here we explicitly set the CATALINA_BASE variable and point to new tomcat-instance1 and
tomcat-instance1 the we go to CATALINA_HOME/bin folder because all binary for running tomcat is still present in CATALINA_HOME folder then startup/shutdown the script.

Based on above technique we can create many instance folder and change conf/server.xml file port values and run that instance with own newly created script files.


Step Three—Run

 

We need to give  permission to this scripts to execute. Then we run this script with this command

$ ./startup-instance1.sh
$ ./startup-instance2.sh

Once that runs, Two Tomcat are up and ready on port 8181 and 8282.

You can visually verify that Tomcat is working by accessing your server page at
 your_IP_address:8181 and  your_IP_address:8282

We can stop tomcat instance using the  shutdown script

$ ./shutdown-instance1.sh
$ ./shutdown-instance2.sh

This will shutdown the tomcat instance. Enjoy multiple instance of Tomcat!!!

 

 


Comments

Popular posts from this blog

JavaMelody: Monitoring the Performance of Tomcat Application Server

Javamelody is an opensource (LGPL) application to monitor Java or Java EE application servers in QA and production environments. JavaMelody is mainly based on statistics of requests and on evolution charts. (Extract from the Javamelody home page) It allows to improve applications in QA and production Give facts about the average response times and number of executions Make decisions when trends are bad, before problems become too serious Optimize based on the more limiting response times Find the root causes of response times Verify the real improvement after optimization It includes summary charts showing the evolution over time of the following indicators: Number of executions, mean execution times and percentage of errors of http requests, sql requests, jsp pages or methods of business façades (if EJB3, Spring or Guice) Java memory Java CPU Number of user sessions Number of jdbc connections These charts can be viewed on the current day, week, month, year or cu...

Java HotSpot VM Settings

The following JVM parameters are recommended: -Djava.awt.headless=true  -Dfile.encoding=UTF-8  -server  -Xms512m  -Xmx1024m  -XX:NewSize=256m  -XX:MaxNewSize=256m  -XX:PermSize=256m  -XX:MaxPermSize=256m  -XX:+DisableExplicitGC -Djava.awt.headless=true Headless mode is a system configuration in which the display device, keyboard, or mouse is lacking. Sounds unexpected, but actually you can perform different operations in this mode, even with graphic data. -server The JDK includes two flavors of the VM -- a client-side offering, and a VM tuned for server applications. These two solutions share the Java HotSpot runtime environment code base, but use different compilers that are suited to the distinctly unique performance characteristics of clients and servers. These differences include the compilation inlining policy and heap defaults. Although the Server and the Client VMs are similar, the Serv...

Configuring URL Encoding on Tomcat Application Server

Application servers may have different settings for character encodings. We strongly recommend UTF-8 where possible. By default, Tomcat uses ISO-8859-1 character encoding when decoding URLs received from a browser. This can cause problems when Confluence's encoding is UTF-8, and you are using international characters in the names of attachments or pages. To configure the URL encoding in Tomcat: Step 1 - Configure connector: Edit conf/server.xml and find the line where the Coyote HTTP Connector is defined. It will look something like this, possibly with more parameters: < Connector port = "8080" /> Add a URIEncoding="UTF-8" property to the connector: < Connector port = "8080" protocol = "HTTP/1.1"      connectionTimeout = "20000"      redirectPort = "8443"      URIEncoding = "UTF-8" /> If you are using mod_jk you should appl...