performance tuning for j2ee applications tier-by-tier by oracle
TRANSCRIPT
“This presentation is for informational purposes only and may not be incorporated into a contract or agreement.”
The following is intended to outline our general product direction. Itis intended for information purposes only, and may not be
incorporated into any contract. It is not a commitment to deliver anymaterial, code, or functionality, and should not be relied upon in
making purchasing decision. The development, release, and timingof any features or functionality described for Oracle’s products
remains at the sole discretion of Oracle.
Jonathan MaronConsultant MemberTech Staff
“This presentation is for informational purposes only and may not be incorporated into a contract or agreement.”
PerformanceTuning for J2EEApplicationsTier by Tier
Agenda
• Background• Approach• J2EE Tier by Tier• Tuning• Scaling• Monitoring
Agenda
• Background• Approach• J2EE Tier by Tier• Tuning• Scaling• Monitoring
Performance Issues Abound!
2003 Wily Benchmark Survey shows• 60% of time Java applications fail to meet user
expectations• Only 42% of applications perform as planned during
deployment• 57% of application performance spent in data access
2004 Forrester• 66% of time developers find out about performance
problems from user calls!
J2EE Application Complexity Enterprise
Information Systems Client Side
Presentation
DesktopJava
Application
Device
J2EEClient
Browser
PureHTML
JavaApplet
J2EEPlatform
Web Server
Server-SidePresentation
JSP
Servlet
JSP
J2EEPlatform
EJB Container
Server-SideBusiness Logic
EJB
EJB
EJB
“Premature optimization is theroot of all evil”- Professor Sir Charles Anthony
Richard Hoare
“There are two rules for when tooptimize:
1. Don't do it.2. (For experts only) Don't do it
yet.”
- Michael Jackson, Principles ofProgram Design
“Test driven design can lead toemergent optimization and code thatis readily optimizable. If programmers
develop test first, many of theirupfront concerns about performance
can be deferred.”
- Michael Feathers, EmergentOptimization in Test Driven Design
What is Performance Tuning?
• Anticipate Performance Requirements• Balance cost and benefits of optimal
performance• Optimize
• Response time• Throughput• Wait time
Agenda
• Background• Approach• J2EE Tier by Tier• Tuning• Scaling• Monitoring
Methodical approach toperformance evaluation
DevelopDevelop
IdentifyIdentify
DesignDesignTestTest
EvaluateEvaluate
Know your application
• J2EE (which components?)• JDBC (which datasource class?)• SSL?• Single Sign On?• …
Approach Tuning IssuesLogically and Iteratively
Java Virtual Machine
Application Server
Hardware and Operating System
Applications
Component
Database
Tuning and debugging are ongoing iterative processes. There are no magic bullets.
Agenda
• Background• Approach• J2EE Tier by Tier• Tuning• Scaling• Monitoring
J2EE Application Tuning Enterprise
Information Systems Client Side
Presentation
DesktopJava
Application
Device
J2EEClient
Browser
PureHTML
JavaApplet
J2EEPlatform
Web Server
Server-SidePresentation
JSP
Servlet
JSP
J2EEPlatform
EJB Container
Server-SideBusiness Logic
EJB
EJB
EJB
Tuning JDBC Performance:Start with the Obvious
• Use connection pooling• Connection objects are expensive• Tailor min and max connections to your
application• Avoid cycling physical database connections
• Look for database connections timing out• Tune statement caching
• Cache distinct SQL statements
Connection Pooling
RacingFacade
J2EE Container
• create• teamOrders• . . .
Application usesavailable connections
Con
nect
ion
Pool
ing
From
the
Con
tain
er
Toplink Indirection – Just in TimeReading
• Use of proxy to defer reading until required• Very valuable performance feature• Several Implementation Options
• Explicit proxy• Dynamic proxy (java.lang.reflect.Proxy)• Development time class enhancement (source or byte codes)• Dynamic class enhancement
Customer AddressValueHolder
List PhoneNumber
Tune Your SQL!
• Easier said than done• What is the real SQL running in CMP EJB?
• Look at the SQL on the wire• Tools like P6Spy, Oracle Enterprise Manager
• Minimize database calls• Toplink Indirection, join reading, and batch reading
reduces DB round-trips• Become good friends with your DBA
• Tune using traditional techniques• Explain plan• Tools like SQLPlus and Oracle9i JDeveloper
D E M O N S T R A T I O N
JDBCPerformance
J2EE Application Tuning Enterprise
Information Systems Client Side
Presentation
DesktopJava
Application
Device
J2EEClient
Browser
PureHTML
JavaApplet
J2EEPlatform
Web Server
Server-SidePresentation
JSP
Servlet
JSP
J2EEPlatform
EJB Container
Server-SideBusiness Logic
EJB
EJB
EJB
EJB - Locking-Mode andIsolation
• Pessimistic locking is generally slower• May be required for applications where data
collisions are likely• Increasing isolation decreases performance
• Evaluate your data consistency requirements
Transactions and Performance
• Entity beans load/store data at transactionboundaries
• Transactions settings affect how often databaseis accessed
• Poor performance can be caused by transactionsettings
• Rules of thumb• Always use transactions for entity bean methods• Scope the unit of work from a session bean
Session Bean - Tx:NoneEntity Bean - Tx:Required
TopicSessionFacade
•createTopicSet•printTopicSet•deleteTopicSet
Topic
•create•findBy•getTopicId•getTopicDesc•getTopicName•setTopicId•setTopicDesc•setTopicName
tx:None tx:Required
System.out.println(“<Create Test>");for(int i=0;i<3;i++){ TopicLocal topic = topicHome.create( new Integer(i),("topic " + i)); topic.setDesc("desc" + i);}System.out.println(“</Create Test>");
Resulting Transactional Activity<Create Test>TopicBean: ejbCreate id = 0TopicBean: ejbStore id = 0TopicBean: ejbLoad id = 0TopicBean: ejbStore id = 0TopicBean: ejbCreate id = 1TopicBean: ejbStore id = 1TopicBean: ejbLoad id = 1TopicBean: ejbStore id = 1TopicBean: ejbCreate id = 2TopicBean: ejbStore id = 2TopicBean: ejbLoad id = 2TopicBean: ejbStore id = 2</Create Test>
Tx create
Tx setDesc
Tx create
Tx setDesc
Tx create
Tx setDesc
Requires:12 lifecycle
calls
Session Bean - Tx:RequiredEntity Bean - Tx:RequiredTopicSessionFacade
•createTopicSet•printTopicSet•deleteTopicSet
Topic
•create•findBy•getTopicId•getTopicDesc•getTopicName•setTopicId•setTopicDesc•setTopicName
tx:Required tx:Required
System.out.println(“<Create Test>");for(int i=0;i<3;i++){ TopicLocal topic = topicHome.create( new Integer(i),("topic " + i)); topic.setDesc("desc" + i);}System.out.println(“</Create Test>");
Resulting Transactional Activity
<Create Test>TopicBean: ejbCreate id = 0TopicBean: ejbCreate id = 1TopicBean: ejbCreate id = 2</Create TestTopicBean: ejbStore id = 0TopicBean: ejbStore id = 1TopicBean: ejbStore id = 2
Tx : createTopicSame code:6 lifecycle
calls
Take Advantage of Your EJBContainer Configuration
Specifies how long to keep stateless sessions cached in the pool.StatelessSession
pool-cache-timeout
Specifies whether the container updates only modified fields or all fieldswhen ejbStore is invoked. Default true.
CMPupdate-changed-fields-only
Set to false to avoid the extra select before insert (checks if entity alreadyexists before doing the insert). Detects a duplicate during insert.
CMPdo-select-before-insert
max-tx-retries
Specifies the maximum time to wait for any resource that the EJB containerneeds before the container calls the EJB method (excluding DB).
Session &Entity
call-timeout
Performance Characteristic ImpactedTypeExampleParameter
Session &Entity
Specifies the number of times to retry a transaction that was rolled back dueto system level failures.
D E M O N S T R A T I O N
EJB Tuning
J2EE Application Tuning Enterprise
Information Systems Client Side
Presentation
DesktopJava
Application
Device
J2EEClient
Browser
PureHTML
JavaApplet
J2EEPlatform
Web Server
Server-SidePresentation
JSP
Servlet
JSP
J2EEPlatform
EJB Container
Server-SideBusiness Logic
EJB
EJB
EJB
Tuning Servlet Performance:Load on Startup
• Increases application start-up time butdecreases first-request latency for servlets
• How?• Add <load-on-startup> sub-element inhttp-website.xml to load the entire webmodule on startup
• Add <load-on-startup> sub-element to the<servlet> element in web.xml to load theservlet on startup
Tuning JSP Performance:Pre-Translation
• Pre-compile JSPs into .class files ahead oftime
• In Oracle Application Server, ojspc providesthis functionality
• jsp, and .java• Batch compilation of war, jar, ear and zip files
% ojspc -dir /myapp/mybindir -srcdir/myapp/mysrcdir MyPage.sqljsp MyPage2.jsp
% ojspc -deleteSource myapp.war
Use HTTPSessionAppropriately• Minimize the objects you store in HTTPSession
• Takes up memory• Expensive serialization/deserialization if you use
persistence/replication• Use transient variables to reduce serialization
overhead
• Reduce default session timeout by usingHttpSession.setMaxInactiveInterval()
• Remove session objects when no longer in use
• Use <% @ page session="false"% > in JSP pageswhere you do not need a session
D E M O N S T R A T I O N
Web Tier
Agenda
• Background• Approach• J2EE Tier by Tier• Tuning• Scaling• Monitoring
J2EE Application Tuning Enterprise
Information Systems Client Side
Presentation
DesktopJava
Application
Device
J2EEClient
Browser
PureHTML
JavaApplet
J2EEPlatform
Web Server
Server-SidePresentation
JSP
Servlet
JSP
J2EEPlatform
EJB Container
Server-SideBusiness Logic
EJB
EJB
EJB
Look for Bottlenecks withLoad Testing Tools
• Mercury Loadrunner• Open source
• Apache JMeter• Grinder
• Altaworks Panorama• …
Threads – more aren’tnecessarily better!
• The optimum number of threads required willprobably vary based on application makeupand load
• Reduction of thread contention is key• Iterative process
• Don’t get discouraged!
More threads – morecontention!
Transactions Per Second
0
50
100
150
200
250
300
2 4 8 16 32 64
Max Executor Pool Threads
Thread Group Lock Contention
0.00%
5.00%
10.00%
15.00%
20.00%
25.00%
30.00%
35.00%
40.00%
45.00%
50.00%
2 4 8 16 32 64
Max Executor Pool Threads
Thread Group CPU
0.00%
2.00%
4.00%
6.00%
8.00%
10.00%
12.00%
14.00%
16.00%
18.00%
2 4 8 16 32 64
Max Executor Pool Threads
Thread Group Waiting
0.00%
5.00%
10.00%
15.00%
20.00%
25.00%
30.00%
35.00%
40.00%
45.00%
50.00%
2 4 8 16 32 64
Max Executor Pool Threads
Objects – be economical!• Object creation is expensive
• Especially exceptions• Assess whether unnecessary object creation
is occurring
JVM Tuning
• A number of hotspot VM options are availablefor tuning
• -Xms, -Xmx, -Xmn, -XX:SuvivorRatio,…• Some platform vendors provide additional
options• HP: -XX:+ForceMmapReserved
• Some platforms are not properly tuned out ofthe box for Java processing
Garbage Collection
• Change the JVM Heap size• java –jar –Xms256m –Xmx256m oc4j.jar
• Monitor collection cycles• verbose:gc• Profiling of heap
• JDK 1.5 Jconsole• Intel Vtune• HPJtune• . . .
D E M O N S T R A T I O N
JVM Tuning
Agenda
• Background• Approach• J2EE Tier by Tier• Tuning• Scaling• Monitoring
Sizing
• Sizing or Capacity Planning relates to either• How many system resources are needed to
accommodate users• How many users can be accommodated given a
particular system• Sizing in relation to Performance, Scalability,
and Stress
Sizing and Scalability
•Scalability•The ability of a system toexpand, accommodatingincreased load with littleor no effect onperformance
Sizing Goals
• What are generally the goals leading to asizing exercise?
• Expected system throughput• Operations per time interval (e.g., Hits/sec,
Transactions/sec, Messages/sec)• Total of concurrent users• Maximum response time• Application size
Sizing Methodology
• Decide on a test hardware configuration thatcan be scaled
• Simulate sequence(s) of typical user actions• Application specific• Time-of-day specific
• Apply varying load to the system• Use an appropriate load generation software
(e.g, Mercury LoadRunner, JMeter, etc.)
Sizing Methodology
• Scale hardware if needed to accommodateload
• Stop when your defined criteria threshold ismet
• Number of operations per time interval• Number of concurrent users• Maximum response time
• Iterate to optimize performance by tuning andadjusting the configuration parameters
Agenda
• Background• Approach• J2EE Tier by Tier• Tuning• Scaling• Monitoring
Performance Monitoring
• Optimization doesn’t end withdeployment
• Monitoring tools key to continuedapplication responsiveness
• Oracle Enterprise Manager• HP OpenView
Oracle Enterprise Manager
Features: Grid Control
• Application Server Discovery• Application Server Home Page• Out-of-box Monitoring• Historical Collections & Analysis• Consolidated Group Management• J2EE Application Diagnostics• Application Service Level Management• Configuration Management
Application Server Home Page
Final Thoughts
• Do not optimize prematurely• E.g. an object pool is not always faster
• Performance tuning is an iterative process• Do not add threads haphazardly• Exceptions are expensive
Next Steps• Recommended Parallel Sessions
• Simplify System Monitoring, Using Oracle Enterprise Manager 10g,Monday @ 1:30 pm in Room 302 South
• Leveraging Advanced Features of Oracle Database in J2EE, Thursday@ 10:30 am in Room 308 South
• Related Demos/Exhibits• Enterprise Manager, Toplink, and Oracle Container for J2EE (OC4J) pods
located in Exhibit Hall• Related Web Sites For More Information
• http://www.oracle.com/technology/products/oem/as_mgmt/index.html• http://download-
west.oracle.com/docs/cd/B14099_11/core.1012/b14001/toc.htm• http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html
Shameless Self Promotion
•From amazon.comreviews:
•“Required EnterpriseTransactions Reading”•“All J2EE developersshould read this book”
AQ&Q U E S T I O N SQ U E S T I O N SA N S W E R SA N S W E R S