Top Banner

of 39

Presentation - Java Performance Tuning

Apr 07, 2018

Download

Documents

Bach Ngoc Dat
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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