berlin expert days 2013 - performance talk
TRANSCRIPT
![Page 1: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/1.jpg)
Performance? That's what version 2 is for!Performance? That's what version 2 is for!
Eduard TudenhöfnerEduard Tudenhöfner
![Page 2: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/2.jpg)
Performance? That's what version 2 is for!
Overview
► Introduction / Motivation
► Performance Issues & Solution Strategies
► How to proactively reduce risk of Performance Issues?
► Conclusion
![Page 3: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/3.jpg)
Introduction / Motivation
![Page 4: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/4.jpg)
Why is performance important?
StressProfit
Revenue
Real User Experience
SPEED MATTERS
Trustworthy
Performance USABILITY
![Page 5: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/5.jpg)
Why is performance important?
StressProfit
RevenueEfficiency
Monitoring
Bottlenecks
Real User Experience
Maintenance SPEED MATTERS
Trustworthy
Performance USABILITY
Success Factor
![Page 6: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/6.jpg)
Why is performance important?
StressProfit
RevenueEfficiency
Less Resources Stability
Monitoring
SecuritySecurity
Bottlenecks Economical
Conversion RateFASTER SLA Monitoring
Real User Experience
Maintenance SPEED MATTERS
Trustworthy
Performance
More SPEED
USABILITY
Success Factor
![Page 7: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/7.jpg)
Why is performance important?
StressProfit
RevenueEfficiency
Less Resources
Higher Fault Tolerance
Stability
Monitoring
SecuritySecurity
Bottlenecks Economical
Conversion Rate
SALES
FASTERSatisfied customers
BETTER Reputation
SLA Monitoring
Real User Experience
Maintenance SPEED MATTERS
Trustworthy
Performance
More SPEED
Key Performance Indicators
USABILITY
Success Factor
![Page 8: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/8.jpg)
Investing in Performance really pays off
Why is performance important?
A page that was 2 seconds slower results in a 4.3%
drop in revenue/user(Bing)
400 ms delay cause 0.59% dropin searches/user
(Google)
400 ms slowdown cause 5-9% drop in full-page traffic
(Yahoo)
Introducing gzip compression resultedin 13-25% speedup and cut outbound
network traffic by 50%(Netflix)
Source: www.stevesouders.com
![Page 9: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/9.jpg)
Consequences of Poor Performance
Consequences
► Damaged customer relations
– Reputation of the company suffers
– People will continue to associate poor performance with the product, even when the issue is fixed later on
► Lost income & Delayed project schedules
– Revenue is lost
– Penalties have to be paid due to late delivery
► Increased development & maintenance costs
– Delivering features requires more time and effort if performance issues are hindering the acceptance of those features
– Additional time and resources are required if performance issues are found
![Page 10: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/10.jpg)
Consequences of Poor Performance
The cost to fix a performance issue
► Is a Technical Debt (defined by Ward Cunningham)
– doing things the quick&dirty way sets us up with technical debt
– technical debt incurs interest payments (in the form of additional effort)
– The later technical debt is payed
back, the higher the interest will be
► So should we pay huge interest at the end or pay back technical debt every development cycle?
Source: Steven Haines. Pro Java EE 5: Performance Management and Optimization
![Page 11: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/11.jpg)
Performance Issues & Solution Strategies
![Page 12: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/12.jpg)
Performance Issues & Solution Strategies
Client
Application Server
Databases
Legacy Systems / Service Provider
![Page 13: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/13.jpg)
Client
Application Server
Databases
Legacy Systems / Service Provider
Application
Performance Issues & Solution Strategies
![Page 14: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/14.jpg)
Client
Application Server
Databases
Legacy Systems / Service Provider
Application
Performance Issues & Solution Strategies
![Page 15: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/15.jpg)
Client (UI / Browser)
► Bloated Clients
► Too many requests required until a page is fully loaded– Time to first impression
► Very expensive DOM manipulations
► Unsuitable communication patterns
– long running synchronous calls that block the UI
► Network bandwidth
– especially in the mobile area
Performance Issues & Solution Strategies
![Page 16: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/16.jpg)
Performance Issues & Solution Strategiesdone with: www.webpagetest.orgChrome / DSL (1.5 Mbps/384Kbps)
50ms RTT
![Page 17: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/17.jpg)
Performance Issues & Solution Strategies
49 requests
3.9 s till page is fully loaded
done with: www.webpagetest.orgChrome / DSL (1.5 Mbps/384Kbps)
50ms RTT
Rendering starts after 3.4 s
DOM completeafter 2.6 s
two uncompressedimages
![Page 18: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/18.jpg)
Solution Approaches
► Reducing RTTs by– Reducing number of resources
– Avoiding bad requests
– Combining CSS / JS resources (e.g. during build process)
► Reducing Request overhead by
– Using compression (gzip, deflate, Zopfli)
– Minifying CSS / JS resources (cssminifier.com, jscompress.com)
Performance Issues & Solution Strategies
![Page 19: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/19.jpg)
Solution Approaches
► Placement of CSS and JS files– CSS at the top / JS at the bottom
– browser should start rendering as early as possible (user perceives a faster loading page)
– anything below the script is blocked from rendering and downloading until after the script is loaded (even when threads are available)→ entire page is delayed
Performance Issues & Solution Strategies
![Page 20: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/20.jpg)
How to achieve that in Java (e.g. in JSF)?
Performance Issues & Solution Strategies
![Page 21: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/21.jpg)
How to achieve that in Java (e.g. in JSF)?
► JAWR (jawr.java.net)– Built-in minification
– Enforced caching
– Bundling of resources
– CSS image sprite generation
– Can be integrated in Ant / Maven
– Can be used with JSF, Spring MVC, Wicket, Grails, ...
Performance Issues & Solution Strategies
![Page 22: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/22.jpg)
JAWR
Performance Issues & Solution Strategies
source: jawr.java.net
What we would like to achieve
How we want to structure
our work
How we can define files bundles
![Page 23: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/23.jpg)
Client
Application Server
Databases
Legacy Systems / Service Provider
Application
Performance Issues & Solution Strategies
![Page 24: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/24.jpg)
Memory
► Memory leaks / OutOfMemoryErrors (but not every leak leads to OOME)
► Unnecessary creation of expensive objects
► inappropriate GC strategy / Heap sizing (for generational GC)
Performance Issues & Solution Strategies
![Page 25: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/25.jpg)
Solution Approaches (Memory)
► Generation sizing (for generational GC) – -XX:NewRatio=3 → 1:3 (Young:Old) → Young takes ¼ of what was specified with
-Xmx
– Sizing proportion between Old/Young generation is important for performance
– e.g. if too many short-lived objects are created, they are moved to the old generation
– An oversized young generation can also cause performance problems
● JVM guarantees that GC runs on young generation
● space on old generation is reserved for emergencies (so that all objects can be copied)
– Memory analysis with e.g. VisualVM, -verbose:gc
Performance Issues & Solution Strategies
![Page 26: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/26.jpg)
VisualVM with VisualGC Plugin
Performance Issues & Solution Strategies
![Page 27: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/27.jpg)
Caching
► Wrong caching strategy
► Too much or the wrong stuff is cached
► Inappropriate cache sizes (too small / too big)
Performance Issues & Solution Strategies
![Page 28: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/28.jpg)
Solution Approaches (Caching)
► What do we want at the end of the day?– Efficient caching to maximize cache hit ratio that also meets:
● Storage constraints
● Availability constraints
● Tolerance for staleness
► What to cache?
– Easy: Slow-changing / mostly read-only data (metadata, configurations, …)
– Challenging: rapidly changing read-write data
– There will always be tradeoffs
► Caching is not solution to everything
– Bigger cache → less memory available for servicing user requests
Performance Issues & Solution Strategies
![Page 29: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/29.jpg)
Remote Boundaries
► Remote boundaries too fine-grained → too chatty
► remote communication often done transparently for the developer
► increased round trips
► increased serializations/deserializations
► and of course: more memory usage
Performance Issues & Solution Strategies
![Page 30: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/30.jpg)
Solution Approaches (Remote Boundaries)
► Decrease number of remote calls → „The best call is the call that is not done“
► Boundaries should be more coarse-grained e.g. by using wrapper classes (of course that contain only the really required information)
► Depending on the communication parties (heterogeneous/homogeneous), the right protocol should be used
Performance Issues & Solution Strategies
![Page 31: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/31.jpg)
Client
Application Server
Databases
Legacy Systems / Service Provider
Application
Performance Issues & Solution Strategies
![Page 32: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/32.jpg)
Databases (from an application's point-of-view)
► More / Less data is retrieved than actually required
► Same data is retrieved over and over again (n+1 query problem)
► High normalization good for reducing redundancy, but bad for performance
► Inappropriate connection pool sizes
► Usage of O/R mappers– can lead to unexpected behavior if used in a wrong way
– possibilities of JPA framework not known or not used efficiently
Performance Issues & Solution Strategies
![Page 33: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/33.jpg)
Solution Approaches (Databases / OR Mapper)
► Data Retrieval– Read-Only queries (query.setHint(“eclipselink.read-only“, “true“))
● improves performance by avoiding copying and change tracking the objects
– Fetch Joins
– Batch Reads
– Other loading optimizations
● Use projection queries where appropriate● Use pagination for large result sets (query.setMaxResults(), query.setFirstResults())● Use named queries (likely to be precompiled by provider, reusability)
► Updating Data
– Batch Update
● allows a bunch of update operations to be performed as a single DB access● reduces round trips to the database
Performance Issues & Solution Strategies
<property name="eclipselink.jdbc.batch-writing" value="Oracle-JDBC"/>
![Page 34: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/34.jpg)
Fetch Joins - Example
Performance Issues & Solution Strategies
Query query = em.createQuery(“SELECT po from PurchaseOrder po WHERE po.status = 'ACTIVE' AND po.customer.address.city = 'Stuttgart'”);
List<PurchaseOrder> orders = query.getResultList();
for (PurchaseOrder order: orders) { order.getCustomer().getName();}
![Page 35: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/35.jpg)
Fetch Joins - Example
Performance Issues & Solution Strategies
Query query = em.createQuery(“SELECT po from PurchaseOrder po WHERE po.status = 'ACTIVE' AND po.customer.address.city = 'Stuttgart'”);
List<PurchaseOrder> orders = query.getResultList();
for (PurchaseOrder order: orders) { order.getCustomer().getName();}
{returns N purchase orders} → 100 positions = 101 SQLs
![Page 36: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/36.jpg)
Fetch Joins - Example
Performance Issues & Solution Strategies
Query query = em.createQuery(“SELECT po from PurchaseOrder po WHERE po.status = 'ACTIVE' AND po.customer.address.city = 'Stuttgart'”);
List<PurchaseOrder> orders = query.getResultList();
for (PurchaseOrder order: orders) { order.getCustomer().getName();}
{returns N purchase orders} → 100 positions = 101 SQLs
Better:SELECT po from PurchaseOrder po FETCH JOIN po.customer...
![Page 37: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/37.jpg)
Fetch Joins - Example
Performance Issues & Solution Strategies
Query query = em.createQuery(“SELECT po from PurchaseOrder po WHERE po.status = 'ACTIVE' AND po.customer.address.city = 'Stuttgart'”);
List<PurchaseOrder> orders = query.getResultList();
for (PurchaseOrder order: orders) { order.getCustomer().getName();}
{returns N purchase orders} → 100 positions = 101 SQLs
Better:SELECT po from PurchaseOrder po FETCH JOIN po.customer...
{returns N purchase orders} → 100 positions = 1 SQL
→ related objects will be joined into the query instead of being queried independently
![Page 38: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/38.jpg)
Batch Reads - Example
Performance Issues & Solution Strategies
Query query = em.createQuery(“SELECT po from PurchaseOrder po WHERE po.status = 'ACTIVE' AND po.customer.address.city = 'Stuttgart'”);
query.setHint(“eclipselink.batch”, “po.customer”);
...
![Page 39: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/39.jpg)
Batch Reads - Example
Performance Issues & Solution Strategies
Query query = em.createQuery(“SELECT po from PurchaseOrder po WHERE po.status = 'ACTIVE' AND po.customer.address.city = 'Stuttgart'”);
query.setHint(“eclipselink.batch”, “po.customer”);
...
{returns N purchase orders} → 100 positions = 2 SQLs (one additional for each relationship)
→ subsequent queries of related objects can be optimized in batches instead of being retrieved one-by-one
→ Batch reading is more efficient than joining because it avoids reading duplicate data.
![Page 40: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/40.jpg)
Solution Approaches
► Data Retrieval– Read-Only queries (query.setHint(“eclipselink.read-only“, “true“))
● improves performance by avoiding copying and change tracking the objects
– Fetch Joins
– Batch Reads
– Other loading optimizations
● Use projection queries where appropriate● Use pagination for large result sets (query.setMaxResults(), query.setFirstResults())● Use named queries (likely to be precompiled by provider, reusability)
► Updating Data
– Batch Update
● allows a bunch of update operations to be performed as a single DB access● reduces round trips to the database
Performance Issues & Solution Strategies
<property name="eclipselink.jdbc.batch-writing" value="Oracle-JDBC"/>
![Page 41: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/41.jpg)
Client
Application Server
Databases
Legacy Systems / Service Provider
Application
Performance Issues & Solution Strategies
![Page 42: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/42.jpg)
Legacy Systems / Service Provider
► They are often out ouf our control
► Legacy Systems– often very difficult to troubleshoot legacy systems
– running dinosaurs
– limited insight into those systems
► Service Providers– No influence on them
– SLAs
– What do you do if your PaaS provider has connection issues or is down?
Performance Issues & Solution Strategies
![Page 43: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/43.jpg)
How to proactively reduce risk of Performance Issues?
![Page 44: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/44.jpg)
How to proactively reduce risk of Performance Issues?
Pragmatic Solution Approach
► 1. From a general point-of-view– Define someone that is responsible for Performance Management in the
project
– Identify Performance Risks early
– Define Performance Objectives (measurable & realistic)
● otherwise there is a risk that objectives are simply ignored because too difficult to achieve
– Conduct Architectural Reviews (continually)
● to find out whether the architecture is really capable of meeting performance objectives
![Page 45: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/45.jpg)
How to proactively reduce risk of Performance Issues?
Pragmatic Solution Approach
► 1. From a general point-of-view– Do Performance Tests (before application goes to production)
– Monitor your Application (especially in PreProduction & Production)
● to find out how the application is really used (application usage pattterns)
● to identify trends (important for capacity planning)
– Know your users
![Page 46: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/46.jpg)
Pragmatic Solution Approach
► 2. From a technical point-of-view– Know the used technologies
– Always look out for possible performance improvements in those technical areas
● Important: analyze the effects of „improvements“ and „Best Practices“
– Pay back technical debt as soon as possible
– Add small performance tests and not just unit tests (and automate them)
How to proactively reduce risk of Performance Issues?
![Page 47: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/47.jpg)
Conclusion
![Page 48: Berlin Expert Days 2013 - Performance Talk](https://reader036.vdocuments.site/reader036/viewer/2022062313/55a947b01a28ab8c3e8b4765/html5/thumbnails/48.jpg)
Conclusion
Conclusion
► Investing time & money in performance really pays off
► There needs to be someone responsible for APM
► Performance issues can reside anywhere in an architecture– Architectural reviews, performance tests, aware
developers/architects/testers can help in reducing the risk
► From the managements point-of-view it seems that performance engineering seems to cause initially more costs than bringing value
– Problem: difficult to demonstrate success, but poorly performing applications are clearly observable as failures
“Why do we have performance engineers if we don't have performance problems?” by Connie U. Smith