Thursday, July 15, 2010

JConsole setup for remote Oracle Application server JVM monitoring

A lot of performance issues are seen as far as Oracle Application server instances are concerned with.The performance issues might be because of various factors like database,network,JVM etc.Troubleshooting Application level performance issues has got a lot to do with tuning the JVMs used by Oracle Application server oc4j containers.A lot of information about the JVMs like Heap size,Garbage Collection,memory usage,CPU usage etc can be found out using the Jconsole client provided by Sun.

The below steps explain how to setup Jconsole client on local system in order to monitor remote Oracle Application Server JVMs.The same setup can be used in order to monitor Weblogic server JVM too.Though a lot of document regarding the setup can be found on the internet none of those are as clear and precise like the steps mentioned below.The setup has been tested by me and should work flawlessly for others.

1. Install JDK 6 kit on your local system. The installer is named jdk-6u20-windows-i586 and can be downloaded from Sun site.

2. Install JDeveloper on your local system. The version should be The JDeveloper comes with some library files required for JConsole to function remotely.

3. Set the $ORACLE_HOME environment variable to directory path where JDeveloper is installed. Set the JAVA_HOME to directory path where you have installed JDK 6.

D:\Software\jdevstudio10134\jdk\bin>echo %ORACLE_HOME%
D:\Software\jdevstudio10134\jdk\bin>echo %JAVA_HOME%

4. Login to Solaris server where Oracle Application Server is installed server and edit the opmn.xml file present in $ORACLE_HOME/opmn/conf. The modification is adding up the start parameter ‘’ to the oc4j container you want to

ias-component id="SOA_GROUP" status="enabled"

process-type id="oc4j_soa" module-id="OC4J" status="enabled"
category id="start-parameters">
data id="java-options" value="-value=" -server -d64 -XX:PermSize=512m -XX:MaxPermSize=512m -XX:SurvivorRatio
=12 -Xmn3584m -Xms5120M -Xmx5120M -Dstdstream.filesize=10 -Dstdstream.filenumber=10 -Doc4j.userThreads=true -DHTTPClient.socket.staleCheck=true -Djava.securi
ty.policy=$ORACLE_HOME/j2ee/oc4j_soa/config/java2.policy -

5.Restart the oc4j container for which you modified the start parameter using opmnctl command.

6.On your local system(Windows) open the command prompt and check if the ORACLE_HOME and JAVA_HOME env variables are set properly using echo command.Make sure the JDK home/bin directory path is added to PATH.

7. On the local command prompt issue the following to start the Jconsole(Diagram shown below):

jconsole -J-Djmx.remote.protocol.provider.pkgs=oracle.oc4j.admin.jmx.remote -J-Djava.class.path=;%JAVA_HOME%\lib\jconsole.jar;%JAVA_HOME%\lib\tools.jar;%ORACLE_HOME%\j2ee\home\lib\adminclient.jar;%ORACLE_HOME%\j2ee\home\oc4jclient.jar

You would get the below Jconsole login screen.

Select Remote Process radio button and enter the following URL:

(HOSTNAME):(REQUEST_PORT): can be obtained by issuing the following command on the server where OAS is installed: opmnctl status –port

(CONTAINER_NAME) is the container name for the container which you want to monitor eg oc4j_soa

Eg: service:jmx:rmi:///opmn://
8. Click on connect and you should find the below screen:

Your remote setup for Jconsole is complete. Before trying to connect to the remote oc4j JVM make sure the rmi ports are opened. You can test this by using telnet command on your local desktop command prompt.

Eg: telnet 12042

(12042 is the RMI port for oc4j_SOA container for my setup,please check yours using opmnctl status -l command)

Your remote setup for Jconsole is complete.Compared to the local Jconsole setup(will publish this setup soon) the remote setup is  abit slow on performance.The client takes a bit of time before it can show you all graphs.But once data is loaded from the remote server the performance is good enough to monitor the remote JVM. One thing you can be sure about this setup is that it wont affect the server performance in case of production instances.Remote Jconsole setups are reccomended for prod setups.The local Jconsole setups are reccomended for the dev instances.

Hoping we had a great learning.Please do write to me in case of issues.

Happy Learning !!!

Now you can folow us on facebook and post your comments/views and questions for expert advise. Check this out facebook

Find us on facebook here

Oracle Fusion Middleware Admin


  1. Puo,

    Nice Article. Do you have any notes/articles on understanding/analyzing the data shown by JConsole?

  2. Soumya, Thank you very is working for me.

  3. Hi, today I tried this and Jconsole does not start..I get this

    :Usage: jconsole [ -interval=n ] [ -notile ] [ -version ] [ pid | [connection ...

    -interval Set the update interval to n seconds (default is 4 seconds)
    -notile Do not tile windows initially (for two or more connections)
    -version Print program version

    pid The process id of a target process

    connection = host:port || JMX URL (service:jmx:://...)
    host A remote host name or IP address
    port The port number for the remote connection

  4. Nice article

  5. hi every one

    is jconsole really used in prodution envirment

  6. hi
    can any one tell me in soa11g what kind of daily activity we do in prod and non prod...

    plz answer this to me