Links User Guide Reference Apache Tomcat Development | Apache Tomcat 6.0Monitoring and Managing Tomcat| Introduction |
Monitoring is a key aspect of system administration. Looking inside a
running server, obtaining some statistics or reconfiguring some aspects of
an application are all daily administration tasks.
|
| Enabling JMX Remote |
Note: This configuration is needed if you are
going to monitor Tomcat remotely. If you are going
to monitor it locally, using the same user that Tomcat runs with, then
with Java 6 it is not needed at all, and with Java 5 it is as simple as
adding -Dcom.sun.management.jmxremote, see Java documentation.
The Oracle website includes the list of options and how to configure JMX Remote on Java 5:
http://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
and on Java 6:
http://docs.oracle.com/javase/6/docs/technotes/guides/management/agent.html.
The following is a quick configuration guide for Java 5:
Add the following parameters to setenv.bat script of your
Tomcat (see RUNNING.txt for details).
Note: This syntax is for Microsoft Windows. The command has
to be on the same line. It is wrapped to be more readable. If Tomcat is
running as a Windows service, use its configuration dialog to set
java options for the service.
For un*xes remove "set " from beginning of the line.
- If you require authorization, add and change this :
- edit the access authorization file $CATALINA_BASE/conf/jmxremote.access :
- edit the password file $CATALINA_BASE/conf/jmxremote.password :
Tip: The password file should be read-only and only accessible by the
operating system user Tomcat is running as.
Note: The JSR 160 JMX-Adaptor opens a second data channel
on a random port. That is a problem when you have a local firewall installed.
To fix it, configure a JmxRemoteLifecycleListener, as described
in listeners documentation.
|
| Manage Tomcat with JMX remote Ant Tasks |
To simplify JMX usage with Ant 1.6.x, a set of tasks is provided that may
be used with antlib.
antlib: Copy your catalina-ant.jar from $CATALINA_HOME/lib to $ANT_HOME/lib.
The following example shows the JMX Accessor usage:
Note: The name attribute value was wrapped here to be
more readable. It has to be all on the same line, without spaces.
<project name="Catalina Ant JMX"
xmlns:jmx="antlib:org.apache.catalina.ant.jmx"
default="state"
basedir=".">
<property name="jmx.server.name" value="localhost" />
<property name="jmx.server.port" value="9012" />
<property name="cluster.server.address" value="192.168.1.75" />
<property name="cluster.server.port" value="9025" />
<target name="state" description="Show JMX Cluster state">
<jmx:open
host="${jmx.server.name}"
port="${jmx.server.port}"
username="controlRole"
password="tomcat"/>
<jmx:get
name=
"Catalina:type=IDataSender,host=localhost,
senderAddress=${cluster.server.address},senderPort=${cluster.server.port}"
attribute="connected"
resultproperty="IDataSender.backup.connected"
echo="false"
/>
<jmx:get
name="Catalina:type=ClusterSender,host=localhost"
attribute="senderObjectNames"
resultproperty="senderObjectNames"
echo="false"
/>
<!-- get current maxActiveSession from ClusterTest application
echo it to Ant output and store at
property <em>clustertest.maxActiveSessions.orginal</em>
-->
<jmx:get
name="Catalina:type=Manager,path=/ClusterTest,host=localhost"
attribute="maxActiveSessions"
resultproperty="clustertest.maxActiveSessions.orginal"
echo="true"
/>
<!-- set maxActiveSession to 100
-->
<jmx:set
name="Catalina:type=Manager,path=/ClusterTest,host=localhost"
attribute="maxActiveSessions"
value="100"
type="int"
/>
<!-- get all sessions and split result as delimiter <em>SPACE</em> for easy
access all session ids directly with Ant property sessions.[0..n].
-->
<jmx:invoke
name="Catalina:type=Manager,path=/ClusterTest,host=localhost"
operation="listSessionIds"
resultproperty="sessions"
echo="false"
delimiter=" "
/>
<!-- Access session attribute <em>Hello</em> from first session.
-->
<jmx:invoke
name="Catalina:type=Manager,path=/ClusterTest,host=localhost"
operation="getSessionAttribute"
resultproperty="Hello"
echo="false"
>
<arg value="${sessions.0}"/>
<arg value="Hello"/>
</jmx:invoke>
<!-- Query for all application manager.of the server from all hosts
and bind all attributes from all found manager MBeans.
-->
<jmx:query
name="Catalina:type=Manager,*"
resultproperty="manager"
echo="true"
attributebinding="true"
/>
<!-- echo the create properties -->
<echo>
senderObjectNames: ${senderObjectNames.0}
IDataSender.backup.connected: ${IDataSender.backup.connected}
session: ${sessions.0}
manager.length: ${manager.length}
manager.0.name: ${manager.0.name}
manager.1.name: ${manager.1.name}
hello: ${Hello}
manager.ClusterTest.0.name: ${manager.ClusterTest.0.name}
manager.ClusterTest.0.activeSessions: ${manager.ClusterTest.0.activeSessions}
manager.ClusterTest.0.counterSend_EVT_SESSION_EXPIRED:
${manager.ClusterTest.0.counterSend_EVT_SESSION_EXPIRED}
manager.ClusterTest.0.counterSend_EVT_GET_ALL_SESSIONS:
${manager.ClusterTest.0.counterSend_EVT_GET_ALL_SESSIONS}
</echo>
</target>
</project>
import: Import the JMX Accessor Project with
<import file="${CATALINA.HOME}/bin/catalina-tasks.xml" /> and
reference the tasks with jmxOpen, jmxSet, jmxGet,
jmxQuery, jmxInvoke, jmxEquals and jmxCondition.
|
|