java performance mistakes

61
- More on http://blog.dynatrace.com - Dynatrace Free Trial: http://bit.ly/dttrial Andreas Grabner - @grabnerandi Java Performance: Biggest Mistakes

Upload: andreas-grabner

Post on 07-Jul-2015

3.048 views

Category:

Engineering


0 download

DESCRIPTION

Too many database queries, too much data loaded into memory, overloaded html pages, bad architectural decisions, ... These are all reasons why Java Applications are slow. In this presentation - first given at Boston Java Meetup - shows 6 real life examples on why Java-based Applications failed - and you may even heard about this in the news. All examples and the technical details were captured using Dynatrace which is available as a 30 Day Free Trial - http://bit.ly/dttrial - with an option to extend it for another 180 Days in case you share some of your results with us

TRANSCRIPT

Page 1: Java Performance Mistakes

1 @Dynatrace

- More on http://blog.dynatrace.com

- Dynatrace Free Trial: http://bit.ly/dttrial

Andreas Grabner - @grabnerandi

Java Performance:Biggest Mistakes

Page 2: Java Performance Mistakes

2 @Dynatrace

And this is where I am from

Page 3: Java Performance Mistakes

3 @Dynatrace

Page 4: Java Performance Mistakes

4 @Dynatrace

Page 5: Java Performance Mistakes

5 @Dynatrace

Can you tell my age by looking at my first computer?

Page 6: Java Performance Mistakes

6 @Dynatrace

That’s why I ended up talking about performance

Page 7: Java Performance Mistakes

7 @Dynatrace

Nobody wants this …

Page 8: Java Performance Mistakes

8 @Dynatrace

Page 9: Java Performance Mistakes

9 @Dynatrace

Nor this …

Page 10: Java Performance Mistakes

10 @Dynatrace

Page 11: Java Performance Mistakes

11 @Dynatrace

As it leads to this …

Page 12: Java Performance Mistakes

12 @Dynatrace

The “War Room”

Facebook – December 2012

Page 13: Java Performance Mistakes

13 @Dynatrace

And potentially to this …

Page 14: Java Performance Mistakes

14 @Dynatrace

Page 15: Java Performance Mistakes

15 @Dynatrace

And this …

Page 16: Java Performance Mistakes

16 @Dynatrace

Page 17: Java Performance Mistakes

17 @Dynatrace

And that’s why Business doesn’t like it either …

Page 18: Java Performance Mistakes

18 @Dynatrace

~80% of problems

caused by ~20% patterns

YES we know this

80% Dev Time in Bug Fixing

$60B Defect Costs

BUT

Page 19: Java Performance Mistakes

19 @Dynatrace

6 Situations on

WHY this happened,

HOW to avoid it

Page 20: Java Performance Mistakes

20 @Dynatrace

Page 21: Java Performance Mistakes

21 @Dynatrace

“Blindly” (Re)use Existing

Components

Page 22: Java Performance Mistakes

22 @Dynatrace

Requirement: We need a report

Page 23: Java Performance Mistakes

23 @Dynatrace

Using Hibernate results in 4k+ SQL Statements to display 3 items!

Hibernate Executes 4k+ Statements

Individual Execution VERY FAST

But Total SUM takes 6s

Page 24: Java Performance Mistakes

24 @Dynatrace

Page 25: Java Performance Mistakes

25 @Dynatrace

Not every Architect makes good decisions

Page 26: Java Performance Mistakes

26 @Dynatrace

• Symptoms

• HTML takes between 60 and 120s to render

• High GC Time

• Assumptions

• Bad GC Tuning

• Probably bad Database Performance as rendering was simple

Project: Online Room Reservation System

Page 27: Java Performance Mistakes

27 @Dynatrace

Developers built own monitoring

void roomreservationReport(int roomid)

{

long startTime = System.currentTimeMillis();

Object data = loadDataForRoom(roomid);

long dataLoadTime = System.currentTimeMillis() - startTime;

generateReport(data, roomid);

}

Result:

Avg. Data Load Time: 45s!

DB Tool says:

Avg. SQL Query: <1ms!

Page 28: Java Performance Mistakes

28 @Dynatrace

#1: Loading too much data24889! Calls to the

Database API!

High CPU and High Memory Usage to keep all

data in Memory

Page 29: Java Performance Mistakes

29 @Dynatrace

#2: On individual connections 12444!individual

connections

Classical N+1 Query Problem

Individual SQL really <1ms

Page 30: Java Performance Mistakes

30 @Dynatrace

#3: Putting all data in temp Hashtable

Lots of time spent in

Hashtable.get

Called from their Entity Objects

Page 31: Java Performance Mistakes

31 @Dynatrace

• Custom Measuring

• Was impacted by Garbage Collection

• Just measured overall time but not # SQL Executions

• Learn SQL and don’t use Hashtables as Workaround

Lesson Learned

void roomreservationReport(int roomid)

{

long startTime = System.currentTimeMillis();

Object data = loadDataForRoom(roomid);

long dataLoadTime = System.currentTimeMillis() - startTime;

generateReport(data, roomid);

}

Page 32: Java Performance Mistakes

32 @Dynatrace

Page 33: Java Performance Mistakes

33 @Dynatrace

Implementation Flaws

Page 34: Java Performance Mistakes

34 @Dynatrace

Business Impact requires Action!

Page 35: Java Performance Mistakes

35 @Dynatrace

Solution: Cache to the RESCUE!!

Page 36: Java Performance Mistakes

36 @Dynatrace

Implementation and Rollout

Implemented InMemory Cache

Worked well in Load Testing

Page 37: Java Performance Mistakes

37 @Dynatrace

Result: Out of Memory Crashes!!

Still crashes

Problem fixed!Fixed Version Deployed

Page 38: Java Performance Mistakes

38 @Dynatrace

Page 39: Java Performance Mistakes

39 @Dynatrace

Disconnected Teams

Page 40: Java Performance Mistakes

40 @Dynatrace

“Teamwork” between Dev and Ops

SEV1 Problem in Production

Need access to log files

Where are they? Can’t get them

Need to increase log level

Can’t do! Can’t change configfiles in prod!

Page 41: Java Performance Mistakes

41 @Dynatrace

Solution: Implement a Custom “On Demand” Remote Logger

Page 42: Java Performance Mistakes

42 @Dynatrace

Implementation and Rollout

Implemented Custom Logger

Worked well in Load Testing

Page 43: Java Performance Mistakes

43 @Dynatrace

What happened?

~ 1Mio Lock Exceptions in 30 mins

Page 44: Java Performance Mistakes

44 @Dynatrace

Root Cause: A special WebSphere Setting!

Log Service provides a synchronized log file across ALL JVMs

Log Service provides a synchronized log file across

ALL JVMs

Page 45: Java Performance Mistakes

45 @Dynatrace

Page 46: Java Performance Mistakes

46 @Dynatrace

“Deployment” Gone Bad!

Page 47: Java Performance Mistakes

47 @Dynatrace

Test Environment

Production Environment

8x slower3x more SQL

Page 48: Java Performance Mistakes

48 @Dynatrace

Test Environment Production Environment

Hibernate, Classloading,

XML – The Key Hotspots

Hibernate, Classloading, XML

– The Key Hotspots

I/O for Web Requests doesn’t

even show up!

That’s Normal: Having I/O for Web

Request as main contributor

Page 49: Java Performance Mistakes

49 @Dynatrace

Top Contributor Class.getInterfaces

Called from Hibernates FieldInterceptionHelper

These calls all originate form thousands of calls to

find item by code

Page 50: Java Performance Mistakes

50 @Dynatrace

Top Methods related to XML Processing

Classloading is triggered through CustomMonnkey and the Xalan

Parser

Classloading is triggered through CustomMonkey and the Xalan

Parser

Page 51: Java Performance Mistakes

51 @Dynatrace

Page 52: Java Performance Mistakes

52 @Dynatrace

#Push without a Plan

Page 53: Java Performance Mistakes

53 @Dynatrace

Mobile Landing Page of Super Bowl Ad

434 Resources in total on that page:230 JPEGs, 75 PNGs, 50 GIFs, …

Total size of ~ 20MB

Page 54: Java Performance Mistakes

54 @Dynatrace

Fifa.com during Worldcup

http://apmblog.compuware.com/2014/05/21/is-the-fifa-world-cup-website-ready-for-the-tournament/

Page 55: Java Performance Mistakes

55 @Dynatrace

Waiting for Bug Reports

Page 56: Java Performance Mistakes

56 @Dynatrace

Look behind the scenes

Page 57: Java Performance Mistakes

57 @Dynatrace

Page 58: Java Performance Mistakes

58 @Dynatrace

Performance Clinic: Bring Your Own AppWhen: Thursday, December 18th

Lunch Session: NOON – 3PMAfter Work Session: 4PM – 7PM

Where: Dynatrace Office404 Wyman Street, Waltham

Register: http://bit.ly/onlineperfclinic

Page 59: Java Performance Mistakes

59 @Dynatrace

Quick Demo

Page 60: Java Performance Mistakes

60 @Dynatrace

• Get it here: http://bit.ly/dttrial

• YouTube Tutorials: http://bit.ly/dttutorials

• Live Q&A Sessions: http://bit.ly/onlineperfclinic

• Contact me: [email protected] - @grabnerandi

•Special Offer:

• SaaS VIP Program: http://bit.ly/dtaasvip

30 Days Dynatrace Free Trial

Page 61: Java Performance Mistakes

61 @Dynatrace

Andreas GrabnerDynatrace Developer Advocate

@grabnerandi

http://blog.dynatrace.com