Klappe auf! Was macht die JVM denn da? [Ger]

Preview:

Citation preview

Klappe auf! Was macht die JVM denn da?

Vortrag am 5.10.2016

für die

Tobias@Frech.info / @TobiasFrech

JUG Karlsruhe

© Tobias@Frech.info 2

Tobias Frech

Geschäftsführer der Frech IT GmbH

Java-Administration, Betrieb von Java-Anwendungen, Bereitschaft (1st-3rd-Level)Architekturberatung für Performance, Verfügbarkeit und Fehlertoleranz

© Tobias@Frech.info 3

Klappe auf!

By Norbert Schnitzler (Own work) [GFDL (http://www.gnu.org/copyleft/fdl.html) or CC-BY-SA-3.0 (http://creativecommons.org/licenses/by-sa/3.0/)], via Wikimedia Commons

© Tobias@Frech.info 4

Raspberry Pi 3

„Server“-Setup

Browser

JMeter

JVM

PanamaElasticsearch

HTTP

SSHtobi@xps (192.168.1.2)

pi@pi3 (192.168.1.5)

© Tobias@Frech.info 5

Demo

● Anwendung mit JMeter unter Last setzen und analysieren

● Beispiele:

● Angela Dorothea MerkelBundeskanzlerin der Bundesrepublik Deutschland

http://pi3:9200/panama/_search?q=officer.name:%22Angela%20Dorothea%20Merkel%22~4&pretty

● Sigmundur David GunnlaugssonVorsitzender der Fortschrittspartei in Island

http://pi3:9200/panama/_search?q=officer.name:%22Sigmundur%20David%20Gunnlaugsson%22~4&pretty

© Tobias@Frech.info 6

Hurra, wir haben einen Lasttest!

5 10 15 200

5

10

15

20

25

30

35

Clients

Ant

wor

tzei

t

Bitte so nicht!

© Tobias@Frech.info 7

Lasttest und Skalierbarkeit

1 2 3 4 5 6 70

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

AntwortzeitDurchsatz

Clients

Dur

chsa

tz

An

two

rtze

it

© Tobias@Frech.info 8

Lasttests praktisch

Pine 64 (AArch 64)

0 2 4 6 8 10 12 140

5.000

10.000

15.000

20.000

25.000

30.000

35.000

40.000

45.000

50.000

0%

50%

100%

150%

200%

250%

300%

350%

400%

450%

500%

Durchsatz/Min

CPU

IdleDu

rch

satz

CP

U &

Id

le

© Tobias@Frech.info 9

Lasttests praktisch

Raspberry Pi 3

0 2 4 6 8 10 12 140

5.000

10.000

15.000

20.000

25.000

30.000

35.000

40.000

45.000

50.000

0%

50%

100%

150%

200%

250%

300%

350%

400%

450%

500%

Durchsatz/Min

CPU

IdleDu

rch

satz

CP

U &

Id

le

© Tobias@Frech.info 10

JDK Admin-Tools

Console● jps● jinfo● jstack● jstat● jmap

zukünftig:● jcmd

GUI● jconsole● jvisualvm

https://docs.oracle.com/javase/8/ docs/technotes/tools/

© Tobias@Frech.info 11

JVM Tools – Monitoring und Mgmt.

● jps: listet die verfügbaren JVMs auf● jinfo: Informationen über Parameter und JVM-

Environment● jstat: Informationen über Classloading,

Kompilierung und Garbage Collection● jstack: Liste aller Threads mit momentaner

Aktivität● jmap: Histogramm und Dump des JVM-

Speichers

© Tobias@Frech.info 12

Performance-Troubleshooting

Analyse OS-Ressourcen

CPURAMDisk

Prozesse

CPU-LastGarbage Collection

(GC) Analysejstat, jmap

Ursache: GC?

Threaddump Analyse

jstack, Sampler

nein

ja

nein

Memory-Anpassung,GC-Tuning,

Memory-Analyse(Histogramm,

Dump)

ja

Ursachebekannt?

Hybride Threaddump Analyse

top -H, jstack

nein

Ursache beheben oder

kompensierende Maßnahmen:

externe Systeme, Locks,

ja

© Tobias@Frech.info 13

Tools für OS-Ressourcen

● CPU: top● RAM: free● Disk: df, du● Prozesse: ps● Langzeit bzw. nachträglich:

● sar: „Collect, report, or save system activity information.“

© Tobias@Frech.info 14

Performance-Troubleshooting

Analyse OS-Ressourcen

CPURAMDisk

Prozesse

CPU-LastGarbage Collection

(GC) Analysejstat, jmap

Ursache: GC?

Threaddump Analyse

jstack, Sampler

nein

ja

nein

Memory-Anpassung,GC-Tuning,

Memory-Analyse(Histogramm,

Dump)

ja

Ursachebekannt?

Hybride Threaddump Analyse

top -H, jstack

nein

Ursache beheben oder

kompensierende Maßnahmen:

externe Systeme, Locks,

ja

© Tobias@Frech.info 15

JVM-Prozesse finden

● jps● listet die lvmid aller für den ausführenden

Benutzer monitorbaren JVMs auf● -l für vollen Package-Namen● -v für JVM-Argumente● -m für Argumente an die main-Methode

● jcmd● wie jps, vereint auch alle Funktionen der

anderen Tools und löst diese mittelfristig ab

© Tobias@Frech.info 16

JVM Monitoring – Text basiert

● jstat -option jvmid [Interval] [Wiederholungen]● Options:

● class, compiler, gc, gccapacity, gccause, gcnew, gcnewcapacity, gcold, gcoldcapacity, gcpermcapacity, gcutil, printcompilation

© Tobias@Frech.info 17

JVM Troubleshooting - Speicher

● Allgemeine statische GC-Informationen:

● jmap -heap jvmid● Histogram der Heap-Objekte erzeugen:

● jmap -histo jvmid● Dump des JVM-Heaps erzeugen:

● jmap -dump:format=b jvmid● erzeugt Heap-Dump in Datei heap.bin● nach heap.hprof umbenennen● diese kann mit „Eclipse Memory Analyzer“ auf Gründe von

Memory Leaks analysiert werden (http://wiki.eclipse.org/index.php/MemoryAnalyzer)

© Tobias@Frech.info 18

Performance-Troubleshooting

Analyse OS-Ressourcen

CPURAMDisk

Prozesse

CPU-LastGarbage Collection

(GC) Analysejstat, jmap

Ursache: GC?

Threaddump Analyse

jstack, Sampler

nein

ja

nein

Memory-Anpassung,GC-Tuning,

Memory-Analyse(Histogramm,

Dump)

ja

Ursachebekannt?

Hybride Threaddump Analyse

top -H, jstack

nein

Ursache beheben oder

kompensierende Maßnahmen:

externe Systeme, Locks,

ja

© Tobias@Frech.info 19

JVM Troubleshooting - Threads

● jstack● listet alle Threads in dem spezifizierten JVM-

Prozess● zu jedem Thread wird der momentane

Callstack ausgegeben● Option -l listet auch Locks und Deadlocks● Option -F (force)

© Tobias@Frech.info 20

Performance-Troubleshooting

Analyse OS-Ressourcen

CPURAMDisk

Prozesse

CPU-LastGarbage Collection

(GC) Analysejstat, jmap

Ursache: GC?

Threaddump Analyse

jstack, Sampler

nein

ja

nein

Memory-Anpassung,GC-Tuning,

Memory-Analyse(Histogramm,

Dump)

ja

Ursachebekannt?

Hybride Threaddump Analyse

top -H, jstack

nein

Ursache beheben oder

kompensierende Maßnahmen:

externe Systeme, Locks,

ja

© Tobias@Frech.info 21

Hybride Threaddump Analyse

● top● Batch-Modus möglich: -b● Anzahl Interationen: -n 1● Threads statt Prozesse anzeigen: -H● Die angezeigte Prozess-ID pro Thread ist auch die

Thread-ID in der JVM● jstack

● Prozess-ID 23679 (dezimal) ist in Hex 5c7f

=> nid=0x5c7f

© Tobias@Frech.info 22

JVM Environment

● OS Environment (PATH etc.) und JVM Environment (System Properties) sind getrennt

● Werte für das JVM-Environment können durch Programme oder von außen beim Start der JVM mit -Dname=wert gesetzt werden

● jinfo (unter JDK5 nicht für Windows verfügbar)

© Tobias@Frech.info 23

JVM Flags

● Auswahl verschiedener Implementierung und Ausgaben direkt in der JVM

● Logs zu GC, Compiler, Safe Points, Class Loading …● Funktionsweise:

● -XX:+AktivierteOption● -XX:-DeaktivierteOption● -XX:GroessenEinstellung=200m

● Kontrolle und Vergleich zwischen JVM-Versionen:● java -XX:+PrintFlagsFinal -version

© Tobias@Frech.info 24

Code Cache und Compilation

Defaults JDK 7 (Update 80)● -TieredCompilation● ReservedCodeCacheSize=50m● +UseCodeCacheFlushing

Defaults JDK 8 (Update 91)● +TieredCompilation● ReservedCodeCacheSize=250m● +UseCodeCacheFlushing

© Tobias@Frech.info 25

Performance-Troubleshooting

Analyse OS-Ressourcen

CPURAMDisk

Prozesse

CPU-LastGarbage Collection

(GC) Analysejstat, jmap

Ursache: GC?

Threaddump Analyse

jstack, Sampler

nein

ja

nein

Memory-Anpassung,GC-Tuning,

Memory-Analyse(Histogramm,

Dump)

ja

Ursachebekannt?

Hybride Threaddump Analyse

top -H, jstack

nein

Ursache beheben oder

kompensierende Maßnahmen:

externe Systeme, Locks,

ja

© Tobias@Frech.info 26

JVM Agent aktivieren

● Lokal aktivieren:● JDK 5: -Dcom.sun.management.jmxremote● JDK 6+ : nix, dank Attach API

● remote öffnen:-Dcom.sun.management.jmxremote.port=12345-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false

● bei Problemen RMI-Name setzen:-Djava.rmi.server.hostname=...

© Tobias@Frech.info 27

JMX nachträglich aktivieren

● jcmd 1234 ManagementAgent.start jmxremote.port=5454 jmxremote.ssl=false jmxremote.authenticate=false

● ManagementAgent.stop

JMX-Agents sollten auf kritischen Systemen niemals ohne SSL und Authentifizierung gestartet sein!

© Tobias@Frech.info 28

Vielen Dank!

● Fragen?

Tobias@Frech.info / @TobiasFrech

© Tobias@Frech.info 29

Quellen

● Index Panama papers for elastic graph

https://gist.github.com/markharwood/3306f803c727b29ed2622ee181994cb7

● Specially Designated Nationals List - Data Formats (Machine Readable, sdn.csv)

https://www.treasury.gov/resource-center/sanctions/SDN-List/Pages/sdn_data.aspx

Recommended