Sun Java Solaris Communities My SDN Account Join SDN

Article

Monitoring Application Performance in Sun Java System Application Server 7.x with PerformaSure

 
By Kavya Muthanna and Marina Sum , August 16, 2004  

PerformaSure from Quest Software monitors clustered, n-tier Java 2 Platform, Enterprise Edition (J2EE) applications that are deployed on Sun Java System Application Server 7.x (called Application Server 7.x for short). During that process, PerformaSure helps accomplish the following:

  • Identify trouble spots.

  • Isolate and fix performance problems in the application by providing a way to trace them through the system components.

  • Ensure that the application is meeting its response-time specifications.

FIGURE 1 illustrates the process.

 
FIGURE 1: Monitoring Applications with PerformaSure in the J2EE Environment
FIGURE 1: Monitoring Applications with PerformaSure in the J2EE Environment
 

Thanks to its low overhead agents with automatic sampling, PerformaSure can run on both production systems and test environments. It generates detailed performance analyses in Acrobat Portable Desktop Format (PDF) and XML. These analyses can help compare and track performance trends over time. Also, PerformaSure's exclusive Tag and Follow technology traces and reconstructs the execution path of end-user transactions across the components of clustered multitier J2EE systems. Consequently, application and database administrators, developers, and QA engineers can collaborate to diagnose and resolve performance issues efficiently and effectively.

This paper describes the capabilities of PerformaSure and its configuration procedure for Application Server 7.x.

Contents
 
Capabilities of PerformaSure
Overview of PerformaSure Components
Configuration of PerformaSure for Application Server 7.x
Enhancement in Application Server 8
References
 
Capabilities of PerformaSure

Large business applications, mostly spread across distributed systems, often adopt the standard three-tier deployment model. Many components in those systems require a tremendous amount of management overhead. As you drill down into the operations, you likely require accurate information about many aspects of the system's performance. That's where PerformaSure can help.

For a typical J2EE application environment, PerformaSure generates the following information:

  • Request cycle -- This is the amount of time that requests take in various containers. PerformaSure can track requests through a distributed application so that you can focus on the important "resource sponges"--the ones that contribute most to performance loss from the end-user perspective.

    PerformaSure collects the data by instrumenting the application. Instrumentation accords an application-centric view of performance that's correlated with the requests from both the user and the back-end relational databases.

  • Network traffic -- This is the number of bytes that are transferred among machines. Network traffic may alert you to an excessive amount of data transfer, some of which may be unnecessary.

  • Operating system metrics -- These are OS-related statistics, for example, CPU use, physical or virtual memory, page faults, and processor-queue lengths.

  • Java virtual machine metrics -- This is the heap information.

  • Application server metrics -- This is a collection of data through Java management extensions (JMX). Examples are data from the following:

    • Servlets and Java ServerPages (JSP) pages
    • Remote Method Invocations (RMIs)
    • Enterprise JavaBeans (EJB) objects
    • Java DataBase Connection pool
    • Java Message Service (JMS) byte transfer


Note - Application Server 7.x complies with J2EE 1.3 and currently does not support JMX. Therefore, PerformaSure cannot monitor Application Server 7.x components.

You can examine the data collected in a session from a PerformaSure browser. PerformaSure provides a total of six browsers--Metrics, Network Traffic, Request Time, Request Tree, SQL, and Thresholds--all slated to help pinpoint performance problems.

FIGURE 2 and FIGURE 3 are examples of display from the Request Tree and SQL browsers, respectively.

 
FIGURE 2: The Request Tree
FIGURE 2: The Request Tree Browser
 
 
FIGURE 3: The SQL Browser
FIGURE 3: The SQL Browser
 


Overview of PerformaSure Components

PerformaSure consists of three main components:

  • PerformaSure agents, where data reside. Agents are the lightweight, configurable software sensors that instrument the Web servers and application servers in your test or production environment. Altogether, there are three types of agents:

    • Service request agent -- This is also called the application server agent, unique for each application server.

    • System agent -- This agent is installed on each machine. We recommend that you install system agents on your database machines and, during QA testing, on the machine that hosts your load generator. That way, you can eliminate performance problems that originate from outside your application.

    • X-Agent -- This agent instruments standalone Java applications and application servers.

  • PerformaSure Nexus, where storage and reduction of collected data occur. Nexus resides on its own machine because it must process and store a lot of data.

  • PerformaSure workstations, where data are displayed for analysis.

FIGURE 4 illustrates how the components relate to each other.

 
FIGURE 4: PerformaSure's Three Main Components
FIGURE 4: PerformaSure's Three Main Components
 


Configuration of PerformaSure for Application Server 7.x

Because PerformaSure works closely with application servers, you must launch your application server instances with startup scripts that contain PerformaSure modifications for Application Server 7.x. Revise those scripts as described in this section before running PerformaSure.

For instructions on running PerformaSure, see that chapter in the PerformaSure Installation and Configuration Guide in the hardcopy documentation that accompanies PerformaSure.

Preinstrumenting the Java Development Kit (JDK)

First, run the preinstrumentor by typing:

% PerformaSure_homedir/scripts/preinstrumentor.cmd Appserver_JDK_dir

Afterwards, the preinstrumentor creates a Java archive (JAR) file called -usr-j2se.jar in the PerformaSure_homedir/bootstrap directory, where PerformaSure_homedir is the location in which you have installed PerformaSure. This JAR file is used in step 6 of the next section, "Configuring Application Server 7.x."

Configuring Application Server 7.x

Next, configure Application Server 7.x by performing these steps:

  1. Start the Administration Server.

    For the procedure, see "Starting the Administration Server" in the Application Server Administration Guide.

  2. Go to the Administration interface at http://hostname.domain_name:port_number/.

    For details, see "Accessing the Administration Interface" in the Application Server Administration Guide.

  3. Click the server name under App Server Instances on the left pane, for example, server1.

  4. On the right pane, click the JVM Settings tab and then the JVM Options link.

    A JVM Option text field is displayed, along with an interface to add or delete options.

  5. In the JVM Option field, type the following and then click Add:
    -Dperformasure.agent.appserverinfo=server1:Generic:SunAS7


    The line is then added to the bottom of the list of JVM options.

  6. Again in the JVM Option field, type the following and then click Add:
    -Xbootclasspath/p:PerformaSure_homedir/bootstrap/-usr-j2se.jar


    Be sure to replace PerformaSure_homedir with the actual path name of your bootstrap JAR. For example:
    -Xbootclasspath/p:/PerformaSure3.5/bootstrap/-usr-j2se.jar

  7. Click Save.

  8. Click the General tab.

    The information on your server instance is displayed.

  9. Click Apply Changes.
Inputting Instrumentation Excludes

Third, on the Nexus machine, add the exclude code in CODE EXAMPLE 1 to the UserClasses section in the PerformaSure_homedir/config/client/instrumentation.config file to exclude all the Application Server 7.x-related classes from the instrumentation process.


Note - The list in CODE EXAMPLE 1 can vary among versions of Application Server. This list was compiled from the results of testing on Sun Java System Application Server 7 2004Q2. Contact Quest Software for version updates.

CODE EXAMPLE 1 exclude List for UserClasses

UserClasses = ClassList(
exclude "_jasper._com._iplanet._ias._admin._server._gui._jsp.",
exclude "antlr.",
exclude "archiver.",
exclude "com.iplanet.ias.admin.audit.",
exclude "com.iplanet.ias.admin.clusterverifier.",
exclude "com.iplanet.ias.admin.comm.",
exclude "com.iplanet.ias.admin.common.",
exclude "com.iplanet.ias.admin.event.",
exclude "com.iplanet.ias.admin.monitor.",
exclude "com.iplanet.ias.admin.server.core.",
exclude "com.iplanet.ias.admin.server.gui.bean."
exclude "com.iplanet.ias.admin.server.gui.jato.",
exclude "com.iplanet.ias.admin.server.gui.servlet.",
exclude "com.iplanet.ias.admin.server.gui.util.",
exclude "com.iplanet.ias.admin.servermodel.",
exclude "com.iplanet.ias.admin.snmp.",
exclude "com.iplanet.ias.admin.util.",
exclude "com.iplanet.ias.admin.verifier.",
exclude "com.iplanet.ias.appclient.",
exclude "com.iplanet.ias.cis.",
exclude "com.iplanet.ias.config.",
exclude "com.iplanet.ias.connectors.deployment.",
exclude "com.iplanet.ias.connectors.tools.security.",
exclude "com.iplanet.ias.connectors.util.finals.",
exclude "com.iplanet.ias.connectors.util.monitor.",
exclude "com.iplanet.ias.connectors.util.xml.",
exclude "com.iplanet.ias.corba.ee.internal.iiop.",
exclude "com.iplanet.ias.corba.ee.internal.util.",
exclude "com.iplanet.ias.deployment.",
exclude "com.iplanet.ias.ejb.codegen.",
exclude "com.iplanet.ias.ejb.containers.",
exclude "com.iplanet.ias.installer.core.",
exclude "com.iplanet.ias.installer.utilities.",
exclude "com.iplanet.ias.instance.",
exclude "com.iplanet.ias.jms.",
exclude "com.iplanet.ias.license.",
exclude "com.iplanet.ias.loader.",
exclude "com.iplanet.ias.persistence.internal.ejb.",
exclude "com.iplanet.ias.persistence.internal.model.ejb.util.",
exclude "com.iplanet.ias.resource.",
exclude "com.iplanet.ias.security.",
exclude "com.iplanet.ias.server.",
exclude "com.iplanet.ias.tools.cli.",
exclude "com.iplanet.ias.tools.common.",
exclude "com.iplanet.ias.tools.forte.",
exclude "com.iplanet.ias.tools.verifier.tests.connector.ias.",
exclude "com.iplanet.ias.tools.verifier.tests.ejb.ias.",
exclude "com.iplanet.ias.tools.verifier.tests.web.ias.",
exclude "com.iplanet.ias.transaction.",
exclude "com.iplanet.ias.util.",
exclude "com.iplanet.ias.web.",
exclude "com.iplanet.jato.",
exclude "com.quest.eflex.",
exclude "com.quest.foglight.",
exclude "com.sun.appserv.",
exclude "com.sun.corba.ee.ActivationIDL.",
exclude "com.sun.corba.ee.CosTransactions.",
exclude "com.sun.corba.ee.connection.",
exclude "com.sun.corba.ee.extension.",
exclude "com.sun.corba.ee.interceptor.",
exclude "com.sun.corba.ee.internal.Activation.",
exclude "com.sun.corba.ee.internal.CosNaming.",
exclude "com.sun.corba.ee.internal.DynamicAny.",
exclude "com.sun.corba.ee.internal.Interceptors.",
exclude "com.sun.corba.ee.internal.PCosNaming.",
exclude "com.sun.corba.ee.internal.POA.",
exclude "com.sun.corba.ee.internal.TransactionalPOA.",
exclude "com.sun.corba.ee.internal.TxPOA.",
exclude "com.sun.corba.ee.internal.corba.",
exclude "com.sun.corba.ee.internal.core.",
exclude "com.sun.corba.ee.internal.iiop.",
exclude "com.sun.corba.ee.internal.ior.",
exclude "com.sun.corba.ee.internal.javax.rmi.CORBA.",
exclude "com.sun.corba.ee.internal.orbutil.",
exclude "com.sun.corba.ee.org.omg.CORBA.",
exclude "com.sun.corba.ee.org.omg.CSI.",
exclude "com.sun.corba.ee.org.omg.CSIIOP.",
exclude "com.sun.corba.ee.org.omg.GSSUP.",
exclude "com.sun.corba.se.internal.io.",
exclude "com.sun.corba.se.internal.javax.rmi.",
exclude "com.sun.corba.se.internal.util.",
exclude "com.sun.ejb.",
exclude "com.sun.enterprise.",
exclude "com.sun.forte4j.modules.dbmodel.",
exclude "com.sun.java.help.impl.",
exclude "com.sun.java.help.search.",
exclude "com.sun.jdo.api.persistence.enhancer.",
exclude "com.sun.jdo.api.persistence.model.",
exclude "com.sun.jdo.api.persistence.support.",
exclude "com.sun.jdo.spi.persistence.support.ejb.cmp.",
exclude "com.sun.jdo.spi.persistence.support.ejb.ejbc.",
exclude "com.sun.jdo.spi.persistence.support.ejb.ejbqlc.",
exclude "com.sun.jdo.spi.persistence.support.ejb.enhancer.meta.",
exclude "com.sun.jdo.spi.persistence.support.ejb.model.",
exclude "com.sun.jdo.spi.persistence.support.sqlstore.",
exclude "com.sun.jdo.spi.persistence.utility.",
exclude "com.sun.jndi.url.corbaname.",
exclude "com.sun.jts.CosTransactions.",
exclude "com.sun.jts.jta.",
exclude "com.sun.jts.jtsxa.",
exclude "com.sun.jts.otsidl.",
exclude "com.sun.jts.pi.",
exclude "com.sun.jts.trace.",
exclude "com.sun.jts.utils.",
exclude "com.sun.logging.",
exclude "com.sun.management.jmx.",
exclude "com.sun.org.omg.CORBA.",
exclude "com.sun.org.omg.SendingContext.",
exclude "com.sun.tools.corba.se.idl.",
exclude "com.sun.web.security.",
exclude "com.sun.web.server.",
exclude "com.werken.saxpath.",
exclude "javax.ejb.",
exclude "javax.help.",
exclude "javax.jms.",
exclude "javax.management.",
exclude "javax.resource.",
exclude "javax.servlet.",
exclude "javax.transaction.",
exclude "org.apache.catalina.",
exclude "org.apache.jasper.",
exclude "org.apache.naming.",
exclude "org.apache.taglibs.standard.extra.spath.",
exclude "org.apache.taglibs.standard.lang.jpath.adapter.",
exclude "org.apache.taglibs.standard.lang.jpath.encoding.",
exclude "org.apache.taglibs.standard.lang.jpath.example.",
exclude "org.apache.taglibs.standard.lang.jpath.expression.",
exclude "org.apache.taglibs.standard.lang.jstl.",
exclude "org.apache.taglibs.standard.lang.support.",
exclude "org.apache.taglibs.standard.resources.",
exclude "org.apache.taglibs.standard.tag.common.core.",
exclude "org.apache.taglibs.standard.tag.common.fmt.",
exclude "org.apache.taglibs.standard.tag.common.sql.",
exclude "org.apache.taglibs.standard.tag.common.xml.",
exclude "org.apache.taglibs.standard.tag.el.core.",
exclude "org.apache.taglibs.standard.tag.el.fmt.",
exclude "org.apache.taglibs.standard.tag.el.sql.",
exclude "org.apache.taglibs.standard.tag.el.xml.",
exclude "org.apache.taglibs.standard.tag.rt.core.",
exclude "org.apache.taglibs.standard.tag.rt.fmt.",
exclude "org.apache.taglibs.standard.tag.rt.sql.",
exclude "org.apache.taglibs.standard.tag.rt.xml.",
exclude "org.apache.taglibs.standard.tei.",
exclude "org.apache.taglibs.standard.tlv.",
exclude "org.apache.tools.ant.",
exclude "org.apache.tools.mail.",
exclude "org.apache.tools.tar.",
exclude "org.apache.tools.zip.",
exclude "org.jaxen.",
exclude "org.mozilla.jss.",
exclude "org.netbeans.modules.schema2beans.",
exclude "org.omg.CORBA.",
exclude "org.omg.CORBA_2_3.",
exclude "org.omg.CosNaming.",
exclude "org.omg.CosTSInteroperation.",
exclude "org.omg.CosTSPortability.",
exclude "org.omg.CosTransactions.",
exclude "org.omg.Dynamic.",
exclude "org.omg.DynamicAny.",
exclude "org.omg.IOP.",
exclude "org.omg.Messaging.",
exclude "org.omg.PortableInterceptor.",
exclude "org.omg.PortableServer.",
exclude "org.omg.SendingContext.",
exclude "org.omg.stub.com.sun.ejb.",
exclude "org.omg.stub.com.sun.enterprise.naming.",
exclude "org.omg.stub.com.sun.enterprise.repository.",
exclude "org.omg.stub.com.sun.enterprise.security.",
exclude "org.omg.stub.com.sun.enterprise.server.",
exclude "org.omg.stub.com.sun.enterprise.tools.deployment.backend.",
exclude "org.omg.stub.com.sun.enterprise.tools.deployment.main.",
exclude "org.omg.stub.com.sun.enterprise.util.",
exclude "org.omg.stub.java.rmi.",
exclude "org.omg.stub.javax.ejb.",
exclude "org.saxpath.",
exclude "sun.rmi.rmic.",
);


Starting the Application Server Instance

Finally, start the application server instance so that all the PerformaSure-specific configurations take effect there.

For details on the start procedure, see "Starting and Stopping an Application Server Instance" in the Application Server Administration Guide.

You are now ready to measure your system's performance with PerformaSure.

Enhancement in Application Server 8

Due to be released in a few months, Sun Java System Application Server Standard Edition 8 and Enterprise Edition 8, which are based on the J2EE 1.4 platform, support JMX and Java Specification Request 77 (JSR 77) (J2EE Management), a standard for instrumentation that exposes management information in Java technology. Consequently, PerformaSure can monitor Application Server 8 components through PerformaSure's X-Agent, which can instrument application servers.

Quite a step forward!

References
About the Authors

Kavya Muthanna, a member of technical staff of the Market Development Engineering group at Sun, works with independent software vendors to develop and integrate applications with Sun Java Enterprise System products.

Marina Sum is a staff writer for Sun Developer Network. She has been writing for Sun for 15 years, mostly in the technical arena.

Rate and Review
Tell us what you think of the content of this page.
Excellent   Good   Fair   Poor  
Comments:
Your email address (no reply is possible without an address):
Sun Privacy Policy

Note: We are not able to respond to all submitted comments.