|
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 |
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
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 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 |
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:
- Start the Administration Server.
For the procedure, see "Starting the Administration Server" in the Application Server Administration Guide.
- 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.
- Click the server name under App Server Instances on the left pane, for example,
server1.
- 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.
- 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.
- 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
- Click Save.
- Click the General tab.
The information on your server instance is displayed.
- 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.
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
- Sun Java System Application Server
- PerformaSure
- J2EE platform
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.
|
|