Performance Tuning for J2EE Applications Tier-By-tier by Oracle

Post on 07-Jun-2015

692 views 0 download

Tags:

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