SlideShare a Scribd company logo
How To Get The Most Out Of Your Hibernate, JBoss EAP 7 Application (Ståle Pedersen)
How to get the most of of your
Hibernate, JBoss EAP 7 application
Ståle Pedersen
Agenda
Lessons of what we've learned….
● Methodology
● Tools
● Profiling
● Benchmarking
● EAP 7 Performance improvements
Methodology
Performance optimization Methodology
Methodology
What
● What prevents my application from running faster?
○ Monitoring
Methodology
What -> Where
● What prevents my application from running faster?
○ Monitoring
● Where does it hide?
○ Profiling
Methodology
What -> Where -> How
● What prevents my application from running faster?
○ Monitoring
● Where does it hide?
○ Profiling
● How can we improve performance?
○ tuning/optimizing
Methodology
Top down approach
● System Level
○ Disks, CPU, Memory, Network, ....
Methodology
Top down approach
● System Level
○ Disks, CPU, Memory, Network, ....
● JVM Level
○ Heap, GC, JIT, Classloading, ….
Methodology
Top down approach
● System Level
○ Disks, CPU, Memory, Network, ....
● JVM Level
○ Heap, GC, JIT, Classloading, ….
● Application Level
○ APIs, Algorithms, Threading, ….
Methodology
What are we looking for?
Methodology
What are we looking for?
● Lot of %sys
○ Networking, scheduling, swapping
Methodology
What are we looking for?
● Lot of %sys
○ Networking, scheduling, swapping
● Lot of %iowait
○ Disk activity, not enough disk block/caches
Methodology
What are we looking for?
● Lot of %sys
○ Networking, scheduling, swapping
● Lot of %iowait
○ Disk activity, not enough disk block/caches
● Lot of %irq, %soft
○ Interacting with devices
Methodology
What are we looking for?
● Lot of %sys
○ Networking, scheduling, swapping
● Lot of %iowait
○ Disk activity, not enough disk block/caches
● Lot of %irq, %soft
○ Interacting with devices
● Lot of %idle
○ Few (runnable) threads, big GC pauses
Methodology
What are we looking for?
● Lot of %sys
○ Networking, scheduling, swapping
● Lot of %iowait
○ Disk activity, not enough disk block/caches
● Lot of %irq, %soft
○ Interacting with devices
● Lot of %idle
○ Few (runnable) threads, big GC pauses
● Lot of %user
○ No need to use profiling until you have high %user time
Tools
Tools
Tool types
● Observability, safe, depending on overhead
● Benchmarking, load testing. Difficult to do in a production environment
● Tuning, changes could hurt performance, perhaps not now or at the current load, but later
Tools
● Tool types
○ Observability, basic
■ top
■ dmesg
■ free
■ vmstat
■ iostat
■ mpstat
■ sar
top
System summary, list processes or threads
● Can miss processes that do not last long enough to be caught
● Will most often consume a fair bit of CPU
● Default summary CPU usage, use “1” to get a better view of cores
dmesg
Print kernel ring buffer
● Display system messages
● An error tool that can give info why an application is slow/dies
● Eg: OOM issues, filehandles, TCP errors, ++
free
Memory usage
● Give a quick overview over memory usage
● Virtual page, and block devices I/O cache
vmstat
Virtual memory stat
● r - number of processes running (waiting to run), should be < num cpus
● b - number of processes sleeping
● free – idle memory, should be high
● si, so – memory swapped to/form disk, should be 0
● cpu, percentages of total CPU time
○ user time, system time, idle, waiting for I/O and stolen time
○ system time used for I/O
mpstat
Processors statistics
● Gives a good overview of CPU time
● Comparable to top (with 1 pressed to show all CPU's), but use less CPU
sar
System activity information
● Check network throughput
● rxpck/s, txpck/s – total number of packets received/transmitted per second
● Use EDEV for statistics on failures the network devices are reporting
sar
System activity information
● Reports TCP network traffic and errors
● active/s – number of local initiated TCP connections per second
● passive/s – number of remote initiated TCP connections per second
● retrans/s – number of segments retransmitted per second
iostat
Monitor system I/O devices
Java Tools
Observing Java applications
Java Tools
Observing Java applications
● Not as many tools out of the box
Java Tools
Observing Java applications
● Not as many tools out of the box
○ but they are powerful
● jstack, jstat, jcmd, jps, jmap, jconsole, jvisualvm
jstack
Prints Java thread stack traces for a Java process
● Useful to quickly look at the current state of the threads
jmap
Prints Java shared object memory maps or heap memory
● Several different options
○ histo[:live] – Prints a histogram of the heap, list classes, number of objects, size
○ heap – Prints information regarding heap status and usage
○ dump:<dump-options> – Dump java heap
○ No options will print shared object mappings
jstat
Monitor JVM statistics; gc, compilations, classes
● Many useful options: class, compiler, gc, gccapacity, gccause, gcnew, gcold, gcutil, ...
○ class – number of classes loaded/unloaded, Kbytes loaded/unloaded
○ compiler - number of compiled, failed, invalid compilations, with failedtype/method
○ gcutil – garbage collection statistics; survivor space 0,1, eden, old space, permanent,
young generation, gc collection time, …
Byteman
A tool that simplifies Java tracing, monitoring and testing
● http://byteman.jboss.org/
RULE ServerLogger_serverStopped
CLASS org.jboss.as.server.ApplicationServerService
METHOD stop
AT ENTRY
IF TRUE
DO
openTrace("stop","/tmp/stop.log");
traceStack("stop: "+Thread.currentThread.getName()+"n","stop");
ENDRULE
Java Tools
What have we learned
● Java have decent monitoring tools out of the box
● Not as easy to use, but powerful
● Gives a lot of information as a (fairly) low cost
● Also included
○ VisualVM
○ JConsole
Tools
Final thought
● Which tool you use/prefer is not important
Tools
Final thought
● Which tool you use/prefer is not important
○ What is important is that you can measure everything
Profilers
Profilers
High CPU load
Where is it?
Profilers
High CPU load
Can profilers help?
Profilers
High CPU load
Can profilers help?
Profilers (try) to show “where” application time is spent
CPU Profiling Limitations
● Many problems are not CPU Bound
○ Networking
○ Database
○ Remote Services
○ I/O
○ Garbage Collection
○ ….
Different CPU Profilers
● Instrumenting
○ Adds timing code to application
● Sampling
○ Collect thread dumps periodically
○ VisualVM, JProfiler, Yourkit, ….
Sampling CPU Profilers
[survey made by RebelLabs]
Sampling Profilers
Samples
MainThread.run()
Backend.findUser()
Controller.doAction()
new User() fetchUser()
display()
someLogic() moreLogic()
evenMoreLogic()
Sampling Profilers
More samples
MainThread.run()
Backend.findUser()
Controller.doAction()
new User() fetchUser()
display()
someLogic() moreLogic()
evenMoreLogic()
Sampling Profilers
Stack tracing
● Most profilers use JVMTI
○ Using GetCallTrace
■ Triggers a global safepoint
■ Collect stack trace
● Large impact on application
● Samples only at safepoints
What is a safepoint?
Java threads poll a global flag
○ At method exit/enter
○ At “uncounted” (int) loops
What is a safepoint?
A safepoint can be delayed by
○ Large Methods
○ Long running “uncounted” (int) loops
Sampling Profilers
Safepoint bias
MainThread.run()
Backend.findUser()
Controller.doAction()
new User() fetchUser()
display()
someLogic() moreLogic()
evenMoreLogic()
Safepoint summary
JVM have many safepoint operations
• To monitor its impact use
– -XX:+PrintGCApplicationStoppedTime
– -XX:+PrintSafepointStatistics
– -XX:+PrintSafepointStatisticsCount=X
Sample Profilers
Java profilers that work better!
● Profilers that use AsyncGetCallTrace
○ Java Mission Control
■ Very good tool, just don’t use it in production (without a license)
○ Oracle Solaris Studio
■ Not well known, it’s free and it works on Linux
○ Honest Profiler
■ Open source, cruder, but works very well
Java Mission Control/Flight Recorder
● Designed for usage in production systems
● Potentially low overhead
○ Be wary of what you record
■ Capture everything is not a good strategy
■ Capture data for one specific thing (memory, contention, cpu)
● Capturing data will not be skewed by safepoints
○ Make sure to use:
■ -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints
● Need a license to be used in production, free to use for development
Java Profilers problem
● Java stack only
● Method tracing have large observer effect
● Do not report:
○ GC
○ Deopt
○ Eg System.arrayCopy ….
How To Get The Most Out Of Your Hibernate, JBoss EAP 7 Application (Ståle Pedersen)
Perf
● A system profiler
● Show the whole stack
○ JVM
○ GC
○ Kernel
● Previously not very useful for Java
○ Missing stacks
○ Method symbols missing
Perf
● Solution
○ Java8u60 added the option -XX:PreserveFramePointer
■ Allows system profilers to capture stack traces
● Visibility of everything
○ Java methods
○ JVM, GC, libraries, kernel
● Low overhead
● Flamegraph
System C++
Java
Flamegraph
Top edge show which method is using CPU and how much.
MainThread.run()
a()
b()
e()
c()
d()
How To Get The Most Out Of Your Hibernate, JBoss EAP 7 Application (Ståle Pedersen)
Limitations of Perf Mixed Mode
● Frames might be missing (inlined)
● Disable inlining:
○ -XX:-Inline
○ Many more Java frames
○ Will be slower
● perf-map-agent have experimental un-inline support
Profiling at Red Hat
● Perf for CPU profiling
● Java Mission Control
○ Contention
○ Thread analysis
○ Memory usage
Benchmarking
Benchmarking
Most benchmarks are flawed, wrong and full of errors.
Benchmarking
Most benchmarks are flawed, wrong and full of errors
○ Used cautiously it can be a very valuable tool to reveal performance issues, compare
applications, libraries, ...
Benchmarking
● Java Benchmarking libraries
○ Microbenchmarks
■ Java Microbenchmark Harness
● http://openjdk.java.net/projects/code-tools/jmh/
■ JMH is the only library on Java we recommend for microbenchmarks
■ Still possible to write bad benchmarks with JMH
Benchmarking
Load testing frameworks
○ Gatling
■ http://gatling.io/
○ Faban
■ http://faban.org/
Benchmarking
A Hibernate microbenchmark lesson
● We wanted to compare cache lookup performance between Hibernate 4 and 5
○ We also wanted to test a new cache we added to Infinispan, Simple cache
● Created several JMH benchmarks that tested different use cases
○ Default cache with and without eviction
○ Simple cache with and without eviction
Benchmarking
A Hibernate microbenchmark lesson
4.3 w/ eviction 292050 ops/s
4.3 w/o eviction 303992 ops/s
5.0 w/ eviction 314629 ops/s
5.0 w/o eviction 611487 ops/s
5.0 w/o eviction (simple cache) 706509 ops/s
Benchmarking
We progressed to a large full scale EE benchmark.
● We expect similar or better results vs EAP6 (Hibernate 4.2)
Benchmarking
We progressed to a large full scale EE benchmark.
● We expect similar or better results vs EAP6 (Hibernate 4.2)
○ The response times are 5-10x slower!
○ And we are now CPU bound
Benchmarking
We progressed to a large full scale EE benchmark.
● We expect similar or better results vs EAP 6 (Hibernate 4.2)
○ The response times are 5-10x slower!
○ And we are now CPU bound
● How is that possible?
Benchmarking
We progressed to a large full scale EE benchmark.
● We expect similar or better results vs EAP 6 (Hibernate 4.2)
○ The response times are 5-10x slower!
○ And we are now CPU bound
● How is that possible?
○ We had several microbenchmarks showing better performance on Hibernate 5
○ Could the problem lie in WildFly 10?
○ Let’s profile!
Benchmarking
Benchmarking
Benchmarking
What had happened?
● Why did we spend so much CPU in this method and why do it not reflect the results from the
microbenchmarks?
Benchmarking
What had happened?
● Why did we spend so much CPU in this method and why do it not reflect the results from the
microbenchmarks?
○ We started debugging
■ -XX+PrintCompilation
● Show when/which methods are compiled/decompiled
● Showed that the method only was compiled once, but twice on EAP 6 (Hib4.2)
● Why?
Benchmarking
What had happened?
● We had made several changes internally in Hibernate 5 to reduce memory usage
Benchmarking
What had happened?
● We had made several changes internally in Hibernate 5 to reduce memory usage
○ One specific class was refactored to an interface
○ Changing a monomorphic call site to a bimorphic call site
■ Which can prevent compiling/inlining of methods!
Benchmarking
What had happened?
● We had made several changes internally in Hibernate 5 to reduce memory usage
○ One specific class was refactored to an interface
○ Changing a monomorphic call site to a bimorphic call site
■ Which can prevent compiling/inlining of methods!
● Direct method calls will “always” be optimized (no subclassing)
● In Java subclassing/inheritance might cause the JVM to no optimize method calls
Benchmarking
Lessons learned
● Code changes might have unexpected consequences
○ In this case, reduced memory, increased CPU usage
● Benchmarks are good, but should always be questioned
○ When you benchmark, analyze (all/most) possible use cases
Benchmarking
Lessons learned
● Code changes might have unexpected consequences
○ In this case, reduced memory, increased CPU usage
● Benchmarks are good, but should always be questioned
○ When you benchmark, analyze (all/most) possible use cases
● Yes, we ended up fixing the CPU usage without causing it to use more memory!
EAP 7 Performance Improvements
Performance highlights
● JPA
● JCA
● Web
EAP 7 Performance Improvements
Hibernate 5 performance improvements
● Memory usage
○ Reduced memory usage 20-50%
EAP 7 Performance Improvements
Hibernate 5 performance improvements
● Memory usage
○ Reduced memory usage 20-50%
● Cache improvements
○ Simple Cache
■ 132% Improvement with immutable objects
EAP 7 Performance Improvements
Hibernate 5 performance improvements
● Memory usage
○ Reduced memory usage 20-50%
● Cache improvements
○ Simple Cache
■ 132% Improvement with immutable objects
● Pooled Optimizer
○ In persistence.xml add property
■ hibernate.id.optimizer.pooled.preferred value="pooled-lotl”
EAP 7 Performance Improvements
Hibernate 5 performance improvements
● Bytecode enhancements
○ hibernate.enhancer.enableDirtyTracking
○ hibernate.enhancer.enableLazyInitialization
● Improved caching
○ hibernate.cache.use_reference_entries
○ hibernate.cache.infinispan.immutable-entity.cfg = “immutable-entity”
EAP 7 Performance Improvements
IronJacamar performance improvements
● Contention issues
○ New default ManagedConnectionPool
EAP 7 Performance Improvements
IronJacamar performance improvements
● Contention issues
○ New default ManagedConnectionPool
● Disabled logging
○ Not everything is disabled
■ <datasource …. enlistment-trace="false" >
EAP 7 Performance Improvements
IronJacamar performance improvements
● Contention issues
○ New default ManagedConnectionPool
● Disabled logging
○ Not everything is disabled
■ <datasource …. enlistment-trace="false" >
● Fairness
○ Set to true at default
■ <datasource> <pool><fair>false</fair></pool>
EAP 7 Performance Improvements
Undertow vs JBossWeb
● Undertow is nonblocking
● JBossWeb have a thread for each connection
EAP 7 Performance Improvements
Simple HelloServlet Benchmark
EAP 6.4 EAP 7
RPS Mean 95% 99% Mean 95% 99%
5000 2 1 4 0 1 1
15000 3 4 56 1 2 6
25000 13 18 247 1 3 7
40000 46 246 414 12 23 84
55000 361 647 1889 65 136 635
EAP 7 Performance Improvements
● Lightweight
● Embeddable
● Scalable
● HTTP/2
● HTTP Upgrade
EAP 7 Performance Improvements
Overall EAP 7 Performance tricks
● Remote byte pooling
○ jboss.remoting.pooled-buffers
● Disable CDI
○ CDI is enabled by default in EAP 7
EAP 7 Performance Improvements
Overall EAP 7 Performance tricks
● Remote byte pooling
○ jboss.remoting.pooled-buffers
● Disable CDI
○ CDI is enabled by default in EAP 7
Q&A

More Related Content

What's hot (20)

PDF
FOSDEM 2015: gdb tips and tricks for MySQL DBAs
Valerii Kravchuk
 
PDF
Gdb basics for my sql db as (openfest 2017) final
Valeriy Kravchuk
 
PDF
Flame Graphs for MySQL DBAs - FOSDEM 2022 MySQL Devroom
Valeriy Kravchuk
 
PDF
A Scalable I/O Manager for GHC
Johan Tibell
 
PPT
Understanding MySQL Performance through Benchmarking
Laine Campbell
 
PPTX
Nagios Conference 2014 - Jeff Mendoza - Monitoring Microsoft Azure with Nagios
Nagios
 
ODP
Nagios Conference 2014 - Troy Lea - Monitoring VMware Virtualization Using vMA
Nagios
 
PPTX
Performance is a feature! - London .NET User Group
Matt Warren
 
PDF
Instant add column for inno db in mariadb 10.3+ (fosdem 2018, second draft)
Valerii Kravchuk
 
PDF
Applying profilers to my sql (fosdem 2017)
Valeriy Kravchuk
 
PDF
More on gdb for my sql db as (fosdem 2016)
Valeriy Kravchuk
 
PDF
Lock free programming- pro tips
Jean-Philippe BEMPEL
 
PPT
Planning For High Performance Web Application
Yue Tian
 
PDF
Java 9-10 What's New
Nicola Pedot
 
PDF
More on bpftrace for MariaDB DBAs and Developers - FOSDEM 2022 MariaDB Devroom
Valeriy Kravchuk
 
PPT
Planning for-high-performance-web-application
Nguyễn Duy Nhân
 
PPTX
Java On Speed
Arto Santala
 
PDF
De Java 8 a Java 17
Víctor Leonel Orozco López
 
PPTX
Java profiling Do It Yourself
aragozin
 
PPT
A brief introduction to PostgreSQL
Vu Hung Nguyen
 
FOSDEM 2015: gdb tips and tricks for MySQL DBAs
Valerii Kravchuk
 
Gdb basics for my sql db as (openfest 2017) final
Valeriy Kravchuk
 
Flame Graphs for MySQL DBAs - FOSDEM 2022 MySQL Devroom
Valeriy Kravchuk
 
A Scalable I/O Manager for GHC
Johan Tibell
 
Understanding MySQL Performance through Benchmarking
Laine Campbell
 
Nagios Conference 2014 - Jeff Mendoza - Monitoring Microsoft Azure with Nagios
Nagios
 
Nagios Conference 2014 - Troy Lea - Monitoring VMware Virtualization Using vMA
Nagios
 
Performance is a feature! - London .NET User Group
Matt Warren
 
Instant add column for inno db in mariadb 10.3+ (fosdem 2018, second draft)
Valerii Kravchuk
 
Applying profilers to my sql (fosdem 2017)
Valeriy Kravchuk
 
More on gdb for my sql db as (fosdem 2016)
Valeriy Kravchuk
 
Lock free programming- pro tips
Jean-Philippe BEMPEL
 
Planning For High Performance Web Application
Yue Tian
 
Java 9-10 What's New
Nicola Pedot
 
More on bpftrace for MariaDB DBAs and Developers - FOSDEM 2022 MariaDB Devroom
Valeriy Kravchuk
 
Planning for-high-performance-web-application
Nguyễn Duy Nhân
 
Java On Speed
Arto Santala
 
De Java 8 a Java 17
Víctor Leonel Orozco López
 
Java profiling Do It Yourself
aragozin
 
A brief introduction to PostgreSQL
Vu Hung Nguyen
 

Viewers also liked (20)

PDF
Agile Is A Four-Letter Word (Jen Krieger)
Red Hat Developers
 
PDF
Developer Meet Designer (Andres Galante & Brian Leathem)
Red Hat Developers
 
PDF
Building Reactive Applications With Node.Js And Red Hat JBoss Data Grid (Gald...
Red Hat Developers
 
PPTX
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
Red Hat Developers
 
PDF
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Red Hat Developers
 
PDF
High Performance Data Storage in a Microservices Environment
Red Hat Developers
 
PDF
Containers: Under The Hood (Vincent Batts)
Red Hat Developers
 
PDF
MicroServices for Java Developers
Red Hat Developers
 
PDF
Microservices with Docker, Kubernetes, and Jenkins
Red Hat Developers
 
PPTX
Ultimate DevOps: OpenShift Dedicated With CloudBees Jenkins Platform (Andy Pe...
Red Hat Developers
 
PDF
Developing In Python On Red Hat Platforms (Nick Coghlan & Graham Dumpleton)
Red Hat Developers
 
PDF
JBoss Enterprise Application Platform 6 Troubleshooting
Alexandre Cavalcanti
 
PDF
EAP6 performance Tuning
Praveen Adupa
 
PDF
7 Must-Try User Experience Tactics For Developers (Tiffany Nolan & Catherine ...
Red Hat Developers
 
PDF
It's not tools, Stupid
ke4qqq
 
PPTX
Codefresh + BlazeMeter Webinar: Continuous Testing for Containerized Applicat...
Brittany Ingram
 
PDF
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
Mickael Istria
 
PDF
JBoss AS7 by Matt Brasier
JBUG London
 
PDF
Putting The 'M' In MBaaS—Red Hat Mobile Client Development Platform (Jay Balu...
Red Hat Developers
 
PDF
Shenandoah GC: Java Without The Garbage Collection Hiccups (Christine Flood)
Red Hat Developers
 
Agile Is A Four-Letter Word (Jen Krieger)
Red Hat Developers
 
Developer Meet Designer (Andres Galante & Brian Leathem)
Red Hat Developers
 
Building Reactive Applications With Node.Js And Red Hat JBoss Data Grid (Gald...
Red Hat Developers
 
Full Stack Development With Node.Js And NoSQL (Nic Raboy & Arun Gupta)
Red Hat Developers
 
Boost Development With Java EE7 On EAP7 (Demitris Andreadis)
Red Hat Developers
 
High Performance Data Storage in a Microservices Environment
Red Hat Developers
 
Containers: Under The Hood (Vincent Batts)
Red Hat Developers
 
MicroServices for Java Developers
Red Hat Developers
 
Microservices with Docker, Kubernetes, and Jenkins
Red Hat Developers
 
Ultimate DevOps: OpenShift Dedicated With CloudBees Jenkins Platform (Andy Pe...
Red Hat Developers
 
Developing In Python On Red Hat Platforms (Nick Coghlan & Graham Dumpleton)
Red Hat Developers
 
JBoss Enterprise Application Platform 6 Troubleshooting
Alexandre Cavalcanti
 
EAP6 performance Tuning
Praveen Adupa
 
7 Must-Try User Experience Tactics For Developers (Tiffany Nolan & Catherine ...
Red Hat Developers
 
It's not tools, Stupid
ke4qqq
 
Codefresh + BlazeMeter Webinar: Continuous Testing for Containerized Applicat...
Brittany Ingram
 
EclipseCon Europe 2016, S. Cela, M.Istria: Eclipse Generic and Extensible Edi...
Mickael Istria
 
JBoss AS7 by Matt Brasier
JBUG London
 
Putting The 'M' In MBaaS—Red Hat Mobile Client Development Platform (Jay Balu...
Red Hat Developers
 
Shenandoah GC: Java Without The Garbage Collection Hiccups (Christine Flood)
Red Hat Developers
 
Ad

Similar to How To Get The Most Out Of Your Hibernate, JBoss EAP 7 Application (Ståle Pedersen) (20)

PDF
Introduction to Java Profiling
Jerry Yoakum
 
PDF
Java Performance & Profiling
Isuru Perera
 
PDF
Java Performance and Profiling
WSO2
 
PDF
Java black box profiling JUG.EKB 2016
aragozin
 
PDF
Java Performance and Using Java Flight Recorder
Isuru Perera
 
PDF
Tools and Tips to Diagnose Performance Issues
Claudio Miranda
 
PDF
Debugging Your Production JVM
kensipe
 
PDF
Iurii Antykhovych "Java and performance tools and toys"
LogeekNightUkraine
 
PPTX
Tuning Java Servers
Srinath Perera
 
PDF
Software Profiling: Java Performance, Profiling and Flamegraphs
Isuru Perera
 
PDF
Java in flames
Isuru Perera
 
PPTX
DIY Java Profiling
Roman Elizarov
 
PDF
Java Performance Analysis on Linux with Flame Graphs
Brendan Gregg
 
PDF
JavaOne 2015 Java Mixed-Mode Flame Graphs
Brendan Gregg
 
PDF
HPC Application Profiling and Analysis
Rishi Pathak
 
PDF
Java Performance Tuning
Ender Aydin Orak
 
PPTX
HPC Application Profiling & Analysis
Rishi Pathak
 
PDF
Web Sphere Problem Determination Ext
Rohit Kelapure
 
PDF
DTrace talk at Oracle Open World
Angelo Rajadurai
 
PPTX
JavaPerformanceChapter_5
Saurav Basu
 
Introduction to Java Profiling
Jerry Yoakum
 
Java Performance & Profiling
Isuru Perera
 
Java Performance and Profiling
WSO2
 
Java black box profiling JUG.EKB 2016
aragozin
 
Java Performance and Using Java Flight Recorder
Isuru Perera
 
Tools and Tips to Diagnose Performance Issues
Claudio Miranda
 
Debugging Your Production JVM
kensipe
 
Iurii Antykhovych "Java and performance tools and toys"
LogeekNightUkraine
 
Tuning Java Servers
Srinath Perera
 
Software Profiling: Java Performance, Profiling and Flamegraphs
Isuru Perera
 
Java in flames
Isuru Perera
 
DIY Java Profiling
Roman Elizarov
 
Java Performance Analysis on Linux with Flame Graphs
Brendan Gregg
 
JavaOne 2015 Java Mixed-Mode Flame Graphs
Brendan Gregg
 
HPC Application Profiling and Analysis
Rishi Pathak
 
Java Performance Tuning
Ender Aydin Orak
 
HPC Application Profiling & Analysis
Rishi Pathak
 
Web Sphere Problem Determination Ext
Rohit Kelapure
 
DTrace talk at Oracle Open World
Angelo Rajadurai
 
JavaPerformanceChapter_5
Saurav Basu
 
Ad

More from Red Hat Developers (20)

PDF
DevNation Tech Talk: Getting GitOps
Red Hat Developers
 
PDF
Exploring the power of OpenTelemetry on Kubernetes
Red Hat Developers
 
PDF
GitHub Makeover | DevNation Tech Talk
Red Hat Developers
 
PDF
Quinoa: A modern Quarkus UI with no hassles | DevNation tech Talk
Red Hat Developers
 
PDF
Extra micrometer practices with Quarkus | DevNation Tech Talk
Red Hat Developers
 
PDF
Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...
Red Hat Developers
 
PDF
Integrating Loom in Quarkus | DevNation Tech Talk
Red Hat Developers
 
PDF
Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...
Red Hat Developers
 
PDF
Containers without docker | DevNation Tech Talk
Red Hat Developers
 
PDF
Distributed deployment of microservices across multiple OpenShift clusters | ...
Red Hat Developers
 
PDF
DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...
Red Hat Developers
 
PDF
Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...
Red Hat Developers
 
PDF
11 CLI tools every developer should know | DevNation Tech Talk
Red Hat Developers
 
PDF
A Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
Red Hat Developers
 
PDF
GitHub Actions and OpenShift: ​​Supercharging your software development loops...
Red Hat Developers
 
PDF
To the moon and beyond with Java 17 APIs! | DevNation Tech Talk
Red Hat Developers
 
PDF
Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...
Red Hat Developers
 
PDF
Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...
Red Hat Developers
 
PDF
Kubernetes configuration and security policies with KubeLinter | DevNation Te...
Red Hat Developers
 
PDF
Level-up your gaming telemetry using Kafka Streams | DevNation Tech Talk
Red Hat Developers
 
DevNation Tech Talk: Getting GitOps
Red Hat Developers
 
Exploring the power of OpenTelemetry on Kubernetes
Red Hat Developers
 
GitHub Makeover | DevNation Tech Talk
Red Hat Developers
 
Quinoa: A modern Quarkus UI with no hassles | DevNation tech Talk
Red Hat Developers
 
Extra micrometer practices with Quarkus | DevNation Tech Talk
Red Hat Developers
 
Event-driven autoscaling through KEDA and Knative Integration | DevNation Tec...
Red Hat Developers
 
Integrating Loom in Quarkus | DevNation Tech Talk
Red Hat Developers
 
Quarkus Renarde 🦊♥: an old-school Web framework with today's touch | DevNatio...
Red Hat Developers
 
Containers without docker | DevNation Tech Talk
Red Hat Developers
 
Distributed deployment of microservices across multiple OpenShift clusters | ...
Red Hat Developers
 
DevNation Workshop: Object detection with Red Hat OpenShift Data Science [Mar...
Red Hat Developers
 
Dear security, compliance, and auditing: We’re sorry. Love, DevOps | DevNatio...
Red Hat Developers
 
11 CLI tools every developer should know | DevNation Tech Talk
Red Hat Developers
 
A Microservices approach with Cassandra and Quarkus | DevNation Tech Talk
Red Hat Developers
 
GitHub Actions and OpenShift: ​​Supercharging your software development loops...
Red Hat Developers
 
To the moon and beyond with Java 17 APIs! | DevNation Tech Talk
Red Hat Developers
 
Profile your Java apps in production on Red Hat OpenShift with Cryostat | Dev...
Red Hat Developers
 
Kafka at the Edge: an IoT scenario with OpenShift Streams for Apache Kafka | ...
Red Hat Developers
 
Kubernetes configuration and security policies with KubeLinter | DevNation Te...
Red Hat Developers
 
Level-up your gaming telemetry using Kafka Streams | DevNation Tech Talk
Red Hat Developers
 

Recently uploaded (20)

PPTX
Build a Custom Agent for Agentic Testing.pptx
klpathrudu
 
PDF
ERP Consulting Services and Solutions by Contetra Pvt Ltd
jayjani123
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PDF
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PDF
NEW-Viral>Wondershare Filmora 14.5.18.12900 Crack Free
sherryg1122g
 
PDF
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
PPTX
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
PDF
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
PDF
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
PDF
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
PDF
Simplify React app login with asgardeo-sdk
vaibhav289687
 
PPTX
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Build a Custom Agent for Agentic Testing.pptx
klpathrudu
 
ERP Consulting Services and Solutions by Contetra Pvt Ltd
jayjani123
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
Build It, Buy It, or Already Got It? Make Smarter Martech Decisions
bbedford2
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
SciPy 2025 - Packaging a Scientific Python Project
Henry Schreiner
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
NEW-Viral>Wondershare Filmora 14.5.18.12900 Crack Free
sherryg1122g
 
The 5 Reasons for IT Maintenance - Arna Softech
Arna Softech
 
ChiSquare Procedure in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
AOMEI Partition Assistant Crack 10.8.2 + WinPE Free Downlaod New Version 2025
bashirkhan333g
 
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
Simplify React app login with asgardeo-sdk
vaibhav289687
 
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 

How To Get The Most Out Of Your Hibernate, JBoss EAP 7 Application (Ståle Pedersen)

  • 2. How to get the most of of your Hibernate, JBoss EAP 7 application Ståle Pedersen
  • 3. Agenda Lessons of what we've learned…. ● Methodology ● Tools ● Profiling ● Benchmarking ● EAP 7 Performance improvements
  • 5. Methodology What ● What prevents my application from running faster? ○ Monitoring
  • 6. Methodology What -> Where ● What prevents my application from running faster? ○ Monitoring ● Where does it hide? ○ Profiling
  • 7. Methodology What -> Where -> How ● What prevents my application from running faster? ○ Monitoring ● Where does it hide? ○ Profiling ● How can we improve performance? ○ tuning/optimizing
  • 8. Methodology Top down approach ● System Level ○ Disks, CPU, Memory, Network, ....
  • 9. Methodology Top down approach ● System Level ○ Disks, CPU, Memory, Network, .... ● JVM Level ○ Heap, GC, JIT, Classloading, ….
  • 10. Methodology Top down approach ● System Level ○ Disks, CPU, Memory, Network, .... ● JVM Level ○ Heap, GC, JIT, Classloading, …. ● Application Level ○ APIs, Algorithms, Threading, ….
  • 11. Methodology What are we looking for?
  • 12. Methodology What are we looking for? ● Lot of %sys ○ Networking, scheduling, swapping
  • 13. Methodology What are we looking for? ● Lot of %sys ○ Networking, scheduling, swapping ● Lot of %iowait ○ Disk activity, not enough disk block/caches
  • 14. Methodology What are we looking for? ● Lot of %sys ○ Networking, scheduling, swapping ● Lot of %iowait ○ Disk activity, not enough disk block/caches ● Lot of %irq, %soft ○ Interacting with devices
  • 15. Methodology What are we looking for? ● Lot of %sys ○ Networking, scheduling, swapping ● Lot of %iowait ○ Disk activity, not enough disk block/caches ● Lot of %irq, %soft ○ Interacting with devices ● Lot of %idle ○ Few (runnable) threads, big GC pauses
  • 16. Methodology What are we looking for? ● Lot of %sys ○ Networking, scheduling, swapping ● Lot of %iowait ○ Disk activity, not enough disk block/caches ● Lot of %irq, %soft ○ Interacting with devices ● Lot of %idle ○ Few (runnable) threads, big GC pauses ● Lot of %user ○ No need to use profiling until you have high %user time
  • 17. Tools
  • 18. Tools Tool types ● Observability, safe, depending on overhead ● Benchmarking, load testing. Difficult to do in a production environment ● Tuning, changes could hurt performance, perhaps not now or at the current load, but later
  • 19. Tools ● Tool types ○ Observability, basic ■ top ■ dmesg ■ free ■ vmstat ■ iostat ■ mpstat ■ sar
  • 20. top System summary, list processes or threads ● Can miss processes that do not last long enough to be caught ● Will most often consume a fair bit of CPU ● Default summary CPU usage, use “1” to get a better view of cores
  • 21. dmesg Print kernel ring buffer ● Display system messages ● An error tool that can give info why an application is slow/dies ● Eg: OOM issues, filehandles, TCP errors, ++
  • 22. free Memory usage ● Give a quick overview over memory usage ● Virtual page, and block devices I/O cache
  • 23. vmstat Virtual memory stat ● r - number of processes running (waiting to run), should be < num cpus ● b - number of processes sleeping ● free – idle memory, should be high ● si, so – memory swapped to/form disk, should be 0 ● cpu, percentages of total CPU time ○ user time, system time, idle, waiting for I/O and stolen time ○ system time used for I/O
  • 24. mpstat Processors statistics ● Gives a good overview of CPU time ● Comparable to top (with 1 pressed to show all CPU's), but use less CPU
  • 25. sar System activity information ● Check network throughput ● rxpck/s, txpck/s – total number of packets received/transmitted per second ● Use EDEV for statistics on failures the network devices are reporting
  • 26. sar System activity information ● Reports TCP network traffic and errors ● active/s – number of local initiated TCP connections per second ● passive/s – number of remote initiated TCP connections per second ● retrans/s – number of segments retransmitted per second
  • 29. Java Tools Observing Java applications ● Not as many tools out of the box
  • 30. Java Tools Observing Java applications ● Not as many tools out of the box ○ but they are powerful ● jstack, jstat, jcmd, jps, jmap, jconsole, jvisualvm
  • 31. jstack Prints Java thread stack traces for a Java process ● Useful to quickly look at the current state of the threads
  • 32. jmap Prints Java shared object memory maps or heap memory ● Several different options ○ histo[:live] – Prints a histogram of the heap, list classes, number of objects, size ○ heap – Prints information regarding heap status and usage ○ dump:<dump-options> – Dump java heap ○ No options will print shared object mappings
  • 33. jstat Monitor JVM statistics; gc, compilations, classes ● Many useful options: class, compiler, gc, gccapacity, gccause, gcnew, gcold, gcutil, ... ○ class – number of classes loaded/unloaded, Kbytes loaded/unloaded ○ compiler - number of compiled, failed, invalid compilations, with failedtype/method ○ gcutil – garbage collection statistics; survivor space 0,1, eden, old space, permanent, young generation, gc collection time, …
  • 34. Byteman A tool that simplifies Java tracing, monitoring and testing ● http://byteman.jboss.org/ RULE ServerLogger_serverStopped CLASS org.jboss.as.server.ApplicationServerService METHOD stop AT ENTRY IF TRUE DO openTrace("stop","/tmp/stop.log"); traceStack("stop: "+Thread.currentThread.getName()+"n","stop"); ENDRULE
  • 35. Java Tools What have we learned ● Java have decent monitoring tools out of the box ● Not as easy to use, but powerful ● Gives a lot of information as a (fairly) low cost ● Also included ○ VisualVM ○ JConsole
  • 36. Tools Final thought ● Which tool you use/prefer is not important
  • 37. Tools Final thought ● Which tool you use/prefer is not important ○ What is important is that you can measure everything
  • 40. Profilers High CPU load Can profilers help?
  • 41. Profilers High CPU load Can profilers help? Profilers (try) to show “where” application time is spent
  • 42. CPU Profiling Limitations ● Many problems are not CPU Bound ○ Networking ○ Database ○ Remote Services ○ I/O ○ Garbage Collection ○ ….
  • 43. Different CPU Profilers ● Instrumenting ○ Adds timing code to application ● Sampling ○ Collect thread dumps periodically ○ VisualVM, JProfiler, Yourkit, ….
  • 44. Sampling CPU Profilers [survey made by RebelLabs]
  • 45. Sampling Profilers Samples MainThread.run() Backend.findUser() Controller.doAction() new User() fetchUser() display() someLogic() moreLogic() evenMoreLogic()
  • 46. Sampling Profilers More samples MainThread.run() Backend.findUser() Controller.doAction() new User() fetchUser() display() someLogic() moreLogic() evenMoreLogic()
  • 47. Sampling Profilers Stack tracing ● Most profilers use JVMTI ○ Using GetCallTrace ■ Triggers a global safepoint ■ Collect stack trace ● Large impact on application ● Samples only at safepoints
  • 48. What is a safepoint? Java threads poll a global flag ○ At method exit/enter ○ At “uncounted” (int) loops
  • 49. What is a safepoint? A safepoint can be delayed by ○ Large Methods ○ Long running “uncounted” (int) loops
  • 50. Sampling Profilers Safepoint bias MainThread.run() Backend.findUser() Controller.doAction() new User() fetchUser() display() someLogic() moreLogic() evenMoreLogic()
  • 51. Safepoint summary JVM have many safepoint operations • To monitor its impact use – -XX:+PrintGCApplicationStoppedTime – -XX:+PrintSafepointStatistics – -XX:+PrintSafepointStatisticsCount=X
  • 52. Sample Profilers Java profilers that work better! ● Profilers that use AsyncGetCallTrace ○ Java Mission Control ■ Very good tool, just don’t use it in production (without a license) ○ Oracle Solaris Studio ■ Not well known, it’s free and it works on Linux ○ Honest Profiler ■ Open source, cruder, but works very well
  • 53. Java Mission Control/Flight Recorder ● Designed for usage in production systems ● Potentially low overhead ○ Be wary of what you record ■ Capture everything is not a good strategy ■ Capture data for one specific thing (memory, contention, cpu) ● Capturing data will not be skewed by safepoints ○ Make sure to use: ■ -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints ● Need a license to be used in production, free to use for development
  • 54. Java Profilers problem ● Java stack only ● Method tracing have large observer effect ● Do not report: ○ GC ○ Deopt ○ Eg System.arrayCopy ….
  • 56. Perf ● A system profiler ● Show the whole stack ○ JVM ○ GC ○ Kernel ● Previously not very useful for Java ○ Missing stacks ○ Method symbols missing
  • 57. Perf ● Solution ○ Java8u60 added the option -XX:PreserveFramePointer ■ Allows system profilers to capture stack traces ● Visibility of everything ○ Java methods ○ JVM, GC, libraries, kernel ● Low overhead ● Flamegraph
  • 59. Flamegraph Top edge show which method is using CPU and how much. MainThread.run() a() b() e() c() d()
  • 61. Limitations of Perf Mixed Mode ● Frames might be missing (inlined) ● Disable inlining: ○ -XX:-Inline ○ Many more Java frames ○ Will be slower ● perf-map-agent have experimental un-inline support
  • 62. Profiling at Red Hat ● Perf for CPU profiling ● Java Mission Control ○ Contention ○ Thread analysis ○ Memory usage
  • 64. Benchmarking Most benchmarks are flawed, wrong and full of errors.
  • 65. Benchmarking Most benchmarks are flawed, wrong and full of errors ○ Used cautiously it can be a very valuable tool to reveal performance issues, compare applications, libraries, ...
  • 66. Benchmarking ● Java Benchmarking libraries ○ Microbenchmarks ■ Java Microbenchmark Harness ● http://openjdk.java.net/projects/code-tools/jmh/ ■ JMH is the only library on Java we recommend for microbenchmarks ■ Still possible to write bad benchmarks with JMH
  • 67. Benchmarking Load testing frameworks ○ Gatling ■ http://gatling.io/ ○ Faban ■ http://faban.org/
  • 68. Benchmarking A Hibernate microbenchmark lesson ● We wanted to compare cache lookup performance between Hibernate 4 and 5 ○ We also wanted to test a new cache we added to Infinispan, Simple cache ● Created several JMH benchmarks that tested different use cases ○ Default cache with and without eviction ○ Simple cache with and without eviction
  • 69. Benchmarking A Hibernate microbenchmark lesson 4.3 w/ eviction 292050 ops/s 4.3 w/o eviction 303992 ops/s 5.0 w/ eviction 314629 ops/s 5.0 w/o eviction 611487 ops/s 5.0 w/o eviction (simple cache) 706509 ops/s
  • 70. Benchmarking We progressed to a large full scale EE benchmark. ● We expect similar or better results vs EAP6 (Hibernate 4.2)
  • 71. Benchmarking We progressed to a large full scale EE benchmark. ● We expect similar or better results vs EAP6 (Hibernate 4.2) ○ The response times are 5-10x slower! ○ And we are now CPU bound
  • 72. Benchmarking We progressed to a large full scale EE benchmark. ● We expect similar or better results vs EAP 6 (Hibernate 4.2) ○ The response times are 5-10x slower! ○ And we are now CPU bound ● How is that possible?
  • 73. Benchmarking We progressed to a large full scale EE benchmark. ● We expect similar or better results vs EAP 6 (Hibernate 4.2) ○ The response times are 5-10x slower! ○ And we are now CPU bound ● How is that possible? ○ We had several microbenchmarks showing better performance on Hibernate 5 ○ Could the problem lie in WildFly 10? ○ Let’s profile!
  • 76. Benchmarking What had happened? ● Why did we spend so much CPU in this method and why do it not reflect the results from the microbenchmarks?
  • 77. Benchmarking What had happened? ● Why did we spend so much CPU in this method and why do it not reflect the results from the microbenchmarks? ○ We started debugging ■ -XX+PrintCompilation ● Show when/which methods are compiled/decompiled ● Showed that the method only was compiled once, but twice on EAP 6 (Hib4.2) ● Why?
  • 78. Benchmarking What had happened? ● We had made several changes internally in Hibernate 5 to reduce memory usage
  • 79. Benchmarking What had happened? ● We had made several changes internally in Hibernate 5 to reduce memory usage ○ One specific class was refactored to an interface ○ Changing a monomorphic call site to a bimorphic call site ■ Which can prevent compiling/inlining of methods!
  • 80. Benchmarking What had happened? ● We had made several changes internally in Hibernate 5 to reduce memory usage ○ One specific class was refactored to an interface ○ Changing a monomorphic call site to a bimorphic call site ■ Which can prevent compiling/inlining of methods! ● Direct method calls will “always” be optimized (no subclassing) ● In Java subclassing/inheritance might cause the JVM to no optimize method calls
  • 81. Benchmarking Lessons learned ● Code changes might have unexpected consequences ○ In this case, reduced memory, increased CPU usage ● Benchmarks are good, but should always be questioned ○ When you benchmark, analyze (all/most) possible use cases
  • 82. Benchmarking Lessons learned ● Code changes might have unexpected consequences ○ In this case, reduced memory, increased CPU usage ● Benchmarks are good, but should always be questioned ○ When you benchmark, analyze (all/most) possible use cases ● Yes, we ended up fixing the CPU usage without causing it to use more memory!
  • 83. EAP 7 Performance Improvements Performance highlights ● JPA ● JCA ● Web
  • 84. EAP 7 Performance Improvements Hibernate 5 performance improvements ● Memory usage ○ Reduced memory usage 20-50%
  • 85. EAP 7 Performance Improvements Hibernate 5 performance improvements ● Memory usage ○ Reduced memory usage 20-50% ● Cache improvements ○ Simple Cache ■ 132% Improvement with immutable objects
  • 86. EAP 7 Performance Improvements Hibernate 5 performance improvements ● Memory usage ○ Reduced memory usage 20-50% ● Cache improvements ○ Simple Cache ■ 132% Improvement with immutable objects ● Pooled Optimizer ○ In persistence.xml add property ■ hibernate.id.optimizer.pooled.preferred value="pooled-lotl”
  • 87. EAP 7 Performance Improvements Hibernate 5 performance improvements ● Bytecode enhancements ○ hibernate.enhancer.enableDirtyTracking ○ hibernate.enhancer.enableLazyInitialization ● Improved caching ○ hibernate.cache.use_reference_entries ○ hibernate.cache.infinispan.immutable-entity.cfg = “immutable-entity”
  • 88. EAP 7 Performance Improvements IronJacamar performance improvements ● Contention issues ○ New default ManagedConnectionPool
  • 89. EAP 7 Performance Improvements IronJacamar performance improvements ● Contention issues ○ New default ManagedConnectionPool ● Disabled logging ○ Not everything is disabled ■ <datasource …. enlistment-trace="false" >
  • 90. EAP 7 Performance Improvements IronJacamar performance improvements ● Contention issues ○ New default ManagedConnectionPool ● Disabled logging ○ Not everything is disabled ■ <datasource …. enlistment-trace="false" > ● Fairness ○ Set to true at default ■ <datasource> <pool><fair>false</fair></pool>
  • 91. EAP 7 Performance Improvements Undertow vs JBossWeb ● Undertow is nonblocking ● JBossWeb have a thread for each connection
  • 92. EAP 7 Performance Improvements Simple HelloServlet Benchmark EAP 6.4 EAP 7 RPS Mean 95% 99% Mean 95% 99% 5000 2 1 4 0 1 1 15000 3 4 56 1 2 6 25000 13 18 247 1 3 7 40000 46 246 414 12 23 84 55000 361 647 1889 65 136 635
  • 93. EAP 7 Performance Improvements ● Lightweight ● Embeddable ● Scalable ● HTTP/2 ● HTTP Upgrade
  • 94. EAP 7 Performance Improvements Overall EAP 7 Performance tricks ● Remote byte pooling ○ jboss.remoting.pooled-buffers ● Disable CDI ○ CDI is enabled by default in EAP 7
  • 95. EAP 7 Performance Improvements Overall EAP 7 Performance tricks ● Remote byte pooling ○ jboss.remoting.pooled-buffers ● Disable CDI ○ CDI is enabled by default in EAP 7
  • 96. Q&A