presentation - java performance tuning
TRANSCRIPT
-
8/6/2019 Presentation - Java Performance Tuning
1/39
Java PerformanceTuning
Dr. Jens TrappSoftware Architect
Sun Microsystems, Hamburg
-
8/6/2019 Presentation - Java Performance Tuning
2/39
Sun Proprietary/Confidential: Internal Use Only
Premature Optimizationis the Root of all Evil!!!
-
8/6/2019 Presentation - Java Performance Tuning
3/39
Sun Proprietary/Confidential: Internal Use Only
Agenda
Was ist Performance?> Java Plattform Performance
JVM Monitoring & Tuning> Tools> GC Tuning> Demo
Java Pitfalls
-
8/6/2019 Presentation - Java Performance Tuning
4/39
5
Java SE Performance History
J2SE 1.2.2 J2SE 1.3.1_16 J2SE 1.4.2_11 Java SE 5.0 (_06) Java SE 6
0
50
100
150
200
250
300
350400
450
500
550
600
650
700
750
800
NormalizedtoJ2SE
1.2.2
Performance
VolanoMark 2.5 is a benchmark from Volano LLC ( http://www.volano.com )using Sun's 32-bit JVM on Solaris 9, SunFire v490 4x1.2 GHz, 32 GB
VolanoMark
Java SE 6 enthlt sehr viele Performance Optimierungen~ 10% Performance Verbesserung fr viele Applikationen realistischTeilweise Feauturebackports auch fr Java 5u6
-
8/6/2019 Presentation - Java Performance Tuning
5/39
Sun Proprietary/Confidential: Internal Use Only
Performance Ergonomics
Seit JDK 1.5.0
Weniger Bedarf fr Java -XX:+runfaster Flags
Adaptives Selbst-Tuning der JVM
Bessere Out of the Box Performance
J2SE 1.4.2 J2SE 5.0 Java SE 60%
25%
50%
75%100%
125%
150%
175%
200%
225%
Beispiel: SPECjbb2000: Out-of-box performance
http://www.volano.com/ -
8/6/2019 Presentation - Java Performance Tuning
6/39
Sun Proprietary/Confidential: Internal Use Only
Was ist Performance?
Unter dem Begriff Performance werdenhufig eine Vielzahl unterschiedlicherAspekte zusammengefasst:>
Compute Performance> Perceived Performance> RAM Bedarf> Start-Geschwindigkeit
> Skalierbarkeit> ...
-
8/6/2019 Presentation - Java Performance Tuning
7/39Sun Proprietary/Confidential: Internal Use Only
Voraussetzungen
Performance Vorgaben aus derProjektdefinition> Durchsatz, Antwortzeiten,...
Testflle> Zum Tunen sollten definierte Testflleexistieren
> Testflle sollten eine typischen Mix von Use-
Cases fr die Applikation darstellen> Integrations-Umgebung
Last-Generierung> Ohne die Fhigkeit das System zu belasten
kann meist kein Tuning vorgenommen werden!
-
8/6/2019 Presentation - Java Performance Tuning
8/39Sun Proprietary/Confidential: Internal Use Only
Erkennen von Performance Problemen
Client-Performance> Schlechte GUI Response-Zeit> Hohe Startupzeiten
> Hnger in der Ausfhrung Server Performance
> Zu wenig Durchsatz> CPU's ausgelastet> CPU's idle trotz Client Last> Lange Pausen bei Applikationsausfhrung
-
8/6/2019 Presentation - Java Performance Tuning
9/39Sun Proprietary/Confidential: Internal Use Only
Hufige Performance Probleme
Hardware
Betriebssystem
Java Virtuelle
Machine
Application Server
Java Anwendung> Schlechter Code
> Pools & Caches
> GC und Threading
> DB Indizes
> Falsche Library
> Threading
> TCP Stack> IO-Layout / SAN
> CPU / Memory
> Netzwerk
-
8/6/2019 Presentation - Java Performance Tuning
10/39Sun Proprietary/Confidential: Internal Use Only
Der Java Software Stack
Hardware
Betriebssystem
Java Virtuelle
Machine
Application Server
Java Anwendung
Performance
Monitoring undTuning mu sichber alle Ebenenerstrecken!
+ Netzwerk & DB
-
8/6/2019 Presentation - Java Performance Tuning
11/39Sun Proprietary/Confidential: Internal Use Only
Performance Monitoring auf Ebene
des Betriebssystems Patch-Stand der Firmware und OS> Sun Explorer (Service!)> Kernel- properites: vi
System und Tools> Prozesse& Prozessoren: prstat/top, mpstat> Memory: vmstat
> IO & Netzwerk: iostat, netstat> Prozess: truss, pmap, pldd, ...
Dtrace> Programmierbare Sensoren im Kernel> ...und in der VM
-
8/6/2019 Presentation - Java Performance Tuning
12/39Sun Proprietary/Confidential: Internal Use Only
berwachung und Tuning des JVM
Layers
Java Virtual Machine
Application Server Application Server
HardwareHardware
Operating SystemOperating System
Java ApplicationJava Application
Der Java Software StackDer Java Software Stack
Einflu Faktoren fr JVM Performance:- Wahl der richtigen VM
Immer die neueste VMClient oder Server
- Threading Modell- Thread Synchronisierung- Garbage Collection- Compilation (rarely)
-
8/6/2019 Presentation - Java Performance Tuning
13/39Sun Proprietary/Confidential: Internal Use Only
Neue Tools
Instrumentierung in der JavaVM (1.4.2+) jps -mvl Liste von Java Prozessen
Jinfo JVM Informationen
Jmap Speicherbelegung
Jstack Java Call Stack
jstat und jstatdjstat -class 6047
Loaded Bytes Unloaded Bytes Time
173 135.6 0 0.0 0.81l
-
8/6/2019 Presentation - Java Performance Tuning
14/39Sun Proprietary/Confidential: Internal Use Only
jconsole
JVM Attach on Demand fr JConsole
-
8/6/2019 Presentation - Java Performance Tuning
15/39Sun Proprietary/Confidential: Internal Use Only
Jconsole JMX - MBeans
-
8/6/2019 Presentation - Java Performance Tuning
16/39
17
JDK 6 :
Management und Servicability JVM Attach on Demand fr JConsole
Ermglicht berwachen jeder Applikationohne dass diese mit -Dcom.sun.management.jmxremote gestartet werdenmuss
SIGQUIT Verbesserungen (CTRL-BREAK) Liefert nun Thread States und Heap
Information Lock Informationen fr java.util.concurrent
-
8/6/2019 Presentation - Java Performance Tuning
17/39
18
JDK 6: Servicability Verbessertes OutOfMemory Errorhandling
Exception in thread "main"java.lang.OutOfMemoryError: Java heap space
Neue JVM Parameter -XX:OnOutOfMemoryError=
-XX:+HeapDumpOnOutOfMemoryError
Solaris Only: DTrace Probes in der JVM Ermglicht Analyse von GC, Threads,
Monitoren...
-
8/6/2019 Presentation - Java Performance Tuning
18/39
19
JDK 6 : Management und
Servicability Heap Dump Analyse (nun auch frWindows) jmap -histo liefert ein Heap Histogramm
num #instances #bytes class name--------------------------------------1: 1298 5571944 [I2: 555 469824 [B12: 160 72960 java2d.Tools$315: 2298 55152 java.lang.String
jmap -dump:format=b,file=heap.dmp
liefert Heap Dump einer laufenden JVM jhat startet Heap Analyse Tool
Mini Web Server auf localhost:7000
-
8/6/2019 Presentation - Java Performance Tuning
19/39
20
Servicability: JHat
-
8/6/2019 Presentation - Java Performance Tuning
20/39Sun Proprietary/Confidential: Internal Use Only
JVM Memory Tuning
Identifikation des Problems: OutOfMemory Errors lange Pausen/Schlechte Antwortzeiten Geringer Durchsatz der Applikation Profiling Tools (jProbe, OptimizeIt)
(mgliche) Ursachen Heapsize der JVM ist zu klein (oder zu gross)
Default-Segmentierung des Heaps ist nicht angemessefr die Applikation Zuviele Thread (-Xss)
-
8/6/2019 Presentation - Java Performance Tuning
21/39
Sun Proprietary/Confidential: Internal Use Only
GC-Sizing & Tuning
Ein Garbage Collection Tuning kann verschiedeneZielsetzungen haben> Ziel Durchsatz, d.h. wenige GCs (dafr
lngere) und groen Heap
> Ziel Pausenminimierung, d.h. sehr kleinePausen und viele Gcs ( ~RealtimeAnforderungen)
GC-Tuning DON'Ts
Optimieren, wenn verbose:gc nichtsaufflliges anzeigt Heap > physikalisches Memory New Generation > 1/2 Heap
Nicht versuchen die GC zu berlisten
-
8/6/2019 Presentation - Java Performance Tuning
22/39
Sun Proprietary/Confidential: Internal Use Only
-
8/6/2019 Presentation - Java Performance Tuning
23/39
Sun Proprietary/Confidential: Internal Use Only
Garbage Collection Verfahren
Young Generation> Default: Copying Collector
> Stoppt die Applikation, single-threaded
> ParallelCollector -XX:+UseParNewGC> Stoppt die Applikation, Multi-Threaded
Old Generation> Default: Mark-compact Collector
> Stoppt die Applikation, Single Threaded> Concurrent Mark Sweep Collector
> Stoppt die Applikation nur kurz. Nebenlufig, single threaded> ParallelOldGC
> Stoppt die Applikation, Multi-Threaded
-
8/6/2019 Presentation - Java Performance Tuning
24/39
Sun Proprietary/Confidential: Internal Use Only
Young Generation Collectors
Multi-Threaded Java
Applikation
GC-Thread(s)
-
8/6/2019 Presentation - Java Performance Tuning
25/39
Sun Proprietary/Confidential: Internal Use Only
Old Generation Collectors
Multi-Threaded Java
Applikation
GC-Thread(s)
-
8/6/2019 Presentation - Java Performance Tuning
26/39
Sun Proprietary/Confidential: Internal Use Only
AggressiveHeap
gewagte Heap-Einstellungenvorzunehmen
Einstellungen variieren bei jedem VMRelease> J2SE 1.3.1_02+:
heap = 3875mNew Size = 1600mResizeTLE falseTLESize 256kMaxLiveObjectEvacuationRatio=0UseResizableSurvivorSpaces = trueUseParallelScavenge = true
> J2SE 1.4.1+bail out < 256m memoryinit_heap is min (total mem/2, total_mem - 160m),reset new size to heap * (3/8) if not already set.ResizeTLAB false TLABSize 256k YoungPLABSize 256kUseParallelGC trueUseAdaptiveSizePolicy trueParallelGCThreads set to #cpus if
-
8/6/2019 Presentation - Java Performance Tuning
27/39
Sun Proprietary/Confidential: Internal Use Only
Java Application
Performance
Hardware
Betriebssystem
Java Virtuelle
Machine
Application Server
Java Anwendung
PitfallsProfilingLooking inside
-
8/6/2019 Presentation - Java Performance Tuning
28/39
Sun Proprietary/Confidential: Internal Use Only
Typische Java Fallen
Memory Leaks Generierung zu vieler Objekte
> Buffered Reader/Writer, StringBuilder> Caching von Objekten
> Nur teure Objecte Cachen> Concurrent. Utils
Kein Caching von Remote Verbindungen
> Z.B. zu viele Datenbankanfragen Unntige Synchronization
Oversynchronisation
Clean Code !!! Keine Performance Tricks
-
8/6/2019 Presentation - Java Performance Tuning
29/39
Sun Proprietary/Confidential: Internal Use Only
Netbeans Profiler
Low overhead profiling Attaching to running applications
CPU Performance profiling:> Selective profiling possible.
Memory profiling
Memory leak debugging
Threads profiling
-
8/6/2019 Presentation - Java Performance Tuning
30/39
Sun Proprietary/Confidential: Internal Use Only
Netbeans Profiler
-
8/6/2019 Presentation - Java Performance Tuning
31/39
Sun Proprietary/Confidential: Internal Use Only
Netbeans Profiler
-
8/6/2019 Presentation - Java Performance Tuning
32/39
Sun Proprietary/Confidential: Internal Use Only
Netbeans Profiler
-
8/6/2019 Presentation - Java Performance Tuning
33/39
Sun Proprietary/Confidential: Internal Use Only
Netbeans Profiler
-
8/6/2019 Presentation - Java Performance Tuning
34/39
Sun Proprietary/Confidential: Internal Use Only
Netbeans Profiler
-
8/6/2019 Presentation - Java Performance Tuning
35/39
Sun Proprietary/Confidential: Internal Use Only
Netbeans Profiler CPU Usage
-
8/6/2019 Presentation - Java Performance Tuning
36/39
Sun Proprietary/Confidential: Internal Use Only
Netbeans Profiler - Memory
-
8/6/2019 Presentation - Java Performance Tuning
37/39
Sun Proprietary/Confidential: Internal Use Only
Zusammenfassung
Performance ist immer auch eine Fragewie gut das Gesamt-System (HW, OS,JVM,...) aufeinander abgestimmt sind
Aktuelle JVMs bieten eine Reihe vonTuning und Monitoring Mglichkeiten
ABER: Wenn der Applikations-Codeschlecht ist, wird auch alles Tuning nichts
mehr bringen...
-
8/6/2019 Presentation - Java Performance Tuning
38/39
Sun Proprietary/Confidential: Internal Use Only
Mehr Informationen...
JVM Performance
> http://www.java.sun.com/performance Dtrace:
> http://www.sun.com/bigadmin/content/dtrace JVM Support
> http://developers.sun.com/services/index.jsp
-
8/6/2019 Presentation - Java Performance Tuning
39/39
Performance Tuningund MonitoringSolaris, Java VM und ApplicationServer
Dr. Jens TrappSoftware Architect
Sun Microsystems, Hamburg
http://www.sun.com/bigadmin/content/dtracehttp://www.sun.com/bigadmin/content/dtrace