JMX-Based Monitoring

Java Management Extensions (JMX) is a technology that lets you implement management interfaces for Java applications. A management interface, as defined by JMX, is composed of named objects called MBeans (Management Beans). MBeans are registered with a name (an ObjectName) in an MBeanServer. To manage a resource or many resources in your application, you can write an MBean defining its management interface and register that MBean in your MBeanServer. The content of the MBeanServer can then be exposed through various protocols, implemented by protocol connectors, or protocol adaptors.

Configuring JMX in a WSO2 product

JMX is enabled in WSO2 products by default, which ensures that the JMX server starts automatically when you start a particular product.  Additionally, you can enable JMX separately for the various datasources that are used by the product. Once JMX is enabled, you can log in to the JConsole tool and monitor your product as explained in the next section.

Configuring JMX ports for the server

The default JMX ports (RMIRegistryPort and the RMIServerPort) can be changed by adding the below config into <PRODUCT_HOME>/repository/conf/deployment.tomlfile as shown below. Below are the default values and you can update these default values as required.

 [monitoring.jmx]
 rmi_registry_port = 9999
 rmi_server_port = 11111

Disabling JMX for the server

You can disable the JMX server for your product by adding the rmi_server_start property with value false into <PRODUCT_HOME>/repository/conf/deployment.toml file as shown below.

 [monitoring.jmx]
 rmi_server_start=false

Enabling JMX for a datasource

You can enable JMX for a datasource by adding the <jmxEnabled>true</jmxEnabled> element to the datasource configuration file. For example, to enable JMX for the default Carbon datasource in your product, add the following property to the master-datasources. xml file (stored in the <PRODUCT_HOME>/repository/conf/datasources directory).

TODO: Update with toml config with jmxEnabled=true

<datasource>
    <name>WSO2_CARBON_DB</name>
    <description>The datasource used for registry and user manager</description>
    <jndiConfig>
        <name>jdbc/WSO2CarbonDB</name>
    </jndiConfig>
    <definition type="RDBMS">
        <configuration>
            <url>jdbc:h2:./repository/database/WSO2CARBON_DB;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=60000</url>
            <username>wso2carbon</username>
            <password>wso2carbon</password>
            <driverClassName>org.h2.Driver</driverClassName>
            <maxActive>50</maxActive>
            <maxWait>60000</maxWait>
            <testOnBorrow>true</testOnBorrow>
            <validationQuery>SELECT 1</validationQuery>
            <validationInterval>30000</validationInterval>
            <defaultAutoCommit>false</defaultAutoCommit>
            <jmxEnabled>true</jmxEnabled>
        </configuration>
    </definition>
</datasource>

Monitoring a WSO2 product with JConsole

Jconsole is a JMX-compliant monitoring tool, which comes with the Java Development Kit (JDK) 1.5 and newer versions. You can find this tool inside your <JDK_HOME>/bin directory.

Starting the WSO2 product with JMX

First, start the WSO2 product:

  1. Open a command prompt and navigate to the <PRODUCT_HOME>/bin directory.
  2. Execute the product startup script (wso2server.sh for Linux and wso2server.bat for Windows) to start the server.

    Info

    If JMX is enabled, the JMX server URL will be published on the console when the server starts as shown below.

    INFO {org.wso2.carbon.core.init.CarbonServerManager} -  JMX Service URL  : service:jmx:rmi://<your-ip>:11111/jndi/rmi://<your-ip>:9999/jmxrmi

Once the product server is started, you can start the jConsole tool as follows:

  1. Open a command prompt and navigate to the <JDK_HOME>/bin directory.
  2. Execute the j console command to open the log-in screen of the Java Monitoring & Management Console as shown below.

    log screen

  3. Enter the connection details in the above screen as follows:

    1. Enter the JMX server URL in the Remote Process field. This URL is published on the command prompt when you start the WSO2 server as explained above.

      Info

      If you are connecting with a remote IP address instead of localhost, you need to bind the JMX service to the externally accessible IP address by adding the following system property to the product startup script stored in the <PRODUCT_HOME>/bin directory (wso2server.sh for Linux and wso2server.bat for Windows). For more information, read Troubleshooting Connection Problems in JConsole.

      -Djava.rmi.server.hostname=<IP_ADDRESS_WHICH_YOU_USE_TO_CONNECT_TO_SERVER>

      Be sure to restart the server after adding the above property.

    2. Enter values for the Username and Password fields to log in. If you are logging in as the administrator, you can use the same administrator account that is used to log in to the product's management console: admin/admin.

      Info

      Make sure that the user ID you are using for JMX monitoring is assigned a role that has the Server Admin permission. See Configuring Roles for further information about configuring roles assigned to users. Any user assigned to the admin role can log in to JMX.

  4. Click Connect to open the Java Monitoring & Management Console. The following tabs will be available:

    Overview

    See the Oracle documentation on using JConsole for more information on these tabs.

    Overview

    Memory

    See the Oracle documentation on using JConsole for more information on these tabs.

    Memory

    Threads

    See the Oracle documentation on using JConsole for more information on these tabs.

    Threads

    Classes

    See the Oracle documentation on using JConsole for more information on these tabs.

    Classes

    VM

    See the Oracle documentation on using JConsole for more information on these tabs.

    VM

    MBeans

    See the Oracle documentation on using JConsole for more information on these tabs.

    MBeans

Using the ServerAdmin MBean

When you go to the MBeans tab in the JConsole, the ServerAdmin MBean will be listed under the "org.wso2.carbon" domain as shown below.

Server admin

The ServerAdmin MBean is used for administering the product server instance. There are several server attributes such as "ServerStatus", "ServerData" and "ServerVersion". The "ServerStatus" attribute can take any of the following values:

  • RUNNING
  • SHUTTING_DOWN
  • RESTARTING
  • IN_MAINTENANCE

Attributes

The ServerAdmin MBean has the following operations:

Operation Description
shutdown Forcefully shut down the server.
restart Forcefully restart the server.
restartGracefully Wait till all current requests are served and then restart.
shutdownGracefully Wait till all current requests are served and then shutdown.
startMaintenance Switch the server to maintenance mode. No new requests will be accepted while the server is in maintenance.
endMaintenance Switch the server to normal mode if it was switched to maintenance mode earlier.

Operations

Using the ServiceAdmin MBean

This MBean is used for administering services deployed in your product. Its attributes are as follows:

Attribute Description
NumberOfActiveServices The number of services that can currently serve requests.
NumberOfInactiveServices The number of services which have been disabled by an administrator.
NumberOfFaultyServices The number of services which are faulty.

Number of active services

The operations available in the ServiceAdmin MBean:

Operation Description
startService ( p1:string ) The p1 parameter is the service name. You can activate a service using this operation.
stopService ( p1:string ) The p1 parameter is the service name. You can deactivate/disable a service using this operation.

Operation invocation](https://apim.docs.wso2.com/en/3.0.0/assets/img/administer/operation-invocation.png)

Using the StatisticsAdmin MBean

This MBean is used for monitoring system and server statistics. Its attributes are as follows:

Attributes Description
AvgSystemResponseTime The average response time for all the services deployed in the system. The beginning of the measurement is the time at which the server started.
MaxSystemResponseTime The maximum response time for all the services deployed in the system. The beginning of the measurement is the time at which the server started.
MinSystemResponseTime The minimum time for all the services deployed in the system. The beginning of the measurement is the time at which the server started.
SystemFaultCount The total number of faults that occurred in the system since the server was started.
SystemRequestCount The total number of requests that has been served by the system since the server was started.
SystemResponseCount The total number of response that has been sent by the system since the server was started.

System request count

Operations available in the Statistics MBean:

Operation Description
getServiceRequestCount ( p1:string ) The p1 parameter is the service name. You can get the total number of requests received by this service since the time it was deployed, using this operation.
getServiceResponseCount ( p1:string ) The p1 parameter is the service name. You can get the total number of responses sent by this service since the time it was deployed, using this operation.
getServiceFaultCount ( p1:string ) The p1 parameter is the service name. You can get the total number of fault responses sent by this service since the time it was deployed, using this operation.
getMaxServiceResponseTime ( p1:string ) The p1 parameter is the service name. You can get the maximum response time of this service since deployment.
getMinServiceResponseTime ( p1:string ) The p1 parameter is the service name. You can get the minimum response time of this service since deployment.
getAvgServiceResponseTime ( p1:string ) The p1 parameter is the service name. You can get the average response time of this service since deployment.
getOperationRequestCount ( p1:string, p2:string ) The p1 parameter is the service name. The p2 parameter is the operation name. You can get the total number of requests received by this operation since the time its service was deployed, using this operation.
getOperationResponseCount ( p1:string, p2:string ) The p1 parameter is the service name. The p2 parameter is the operation name. You can get the total number of responses sent by this operation since the time its service was deployed, using this operation.
getOperationFaultCount ( p1:string, p2:string ) The p1 parameter is the service name. The p2 parameter is the operation name. You can get the total number of fault responses sent by this operation since the time its service was deployed, using this operation.
getMaxOperationResponseTime ( p1:string, p2:string ) The p1 parameter is the service name. The p2 parameter is the operation name. You can get the maximum response time of this operation since deployment.
getMinOperationResponseTime ( p1:string, p2:string ) The p1 parameter is the service name. The p2 parameter is the operation name. You can get the minimum response time of this operation since deployment.
getAvgOperationResponseTime ( p1:string, p2:string ) The p1 parameter is the service name. The p2 parameter is the operation name. You can get the average response time of this operation since deployment.

Statistics mbean

Using the DataSource MBean

If you have JMX enabled for a datasource connected to the product, you can monitor the performance of the datasource using this MBean. The DataSource MBean will be listed as shown below.

Datasource mbean

Example: If you have JMX enabled for the default Carbon datasource in the master-datasources.xml. file, the JDBC connection pool parameters that are configured for the Carbon datasource will be listed as attributes as shown below. See the performance tuning guide for instructions on how these parameters are configured for a datasource.

Attributes mbeans

Using product-specific MBeans

The WSO2 product that you are using may have product-specific MBeans enabled for monitoring and managing specific functions. See the documentation for your product for detailed instructions on such product-specific MBeans.

Monitoring a WSO2 product with Jolokia

Jolokia is a JMX-HTTP bridge, which is an alternative to JSR-160 connectors. It is an agent-based approach that supports many platforms. In addition to basic JMX operations, it enhances JMX monitoring with unique features like bulk requests and fine-grained security policies.

Follow the steps below to use Jolokia to monitor a WSO2 product.

  1. Download Jolokia OSGi Agent. (These instructions are tested with the Jolokia OSGI Agent version 1.3.6 by downloading the jolokia-osgi-1.3.6.jar file.)
  2. Add it to the <PRODUCT-HOME>/repository/components/dropins/ directory.

    Tip

    In WSO2 EI, add it to the <EI-HOME>/dropins/ directory.

  3. Start the WSO2 product server.

Once the server starts, you can read MBeans using Jolokia APIs. The following are a few examples.

For more information on the JMX MBeans that are available in WSO2 products, see Monitoring a WSO2 product with JConsole.

Top