Upload
tobias-frech
View
231
Download
0
Embed Size (px)
Citation preview
Klappe auf! Was macht die JVM denn da?
Vortrag am 5.10.2016
für die
[email protected] / @TobiasFrech
JUG Karlsruhe
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
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
Raspberry Pi 3
„Server“-Setup
Browser
JMeter
JVM
PanamaElasticsearch
HTTP
SSHtobi@xps (192.168.1.2)
pi@pi3 (192.168.1.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
Hurra, wir haben einen Lasttest!
5 10 15 200
5
10
15
20
25
30
35
Clients
Ant
wor
tzei
t
Bitte so nicht!
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
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
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
© [email protected] 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/
© [email protected] 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
© [email protected] 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
© [email protected] 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.“
© [email protected] 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
© [email protected] 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
© [email protected] 16
JVM Monitoring – Text basiert
● jstat -option jvmid [Interval] [Wiederholungen]● Options:
● class, compiler, gc, gccapacity, gccause, gcnew, gcnewcapacity, gcold, gcoldcapacity, gcpermcapacity, gcutil, printcompilation
© [email protected] 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)
© [email protected] 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
© [email protected] 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)
© [email protected] 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
© [email protected] 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
© [email protected] 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)
© [email protected] 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
© [email protected] 24
Code Cache und Compilation
Defaults JDK 7 (Update 80)● -TieredCompilation● ReservedCodeCacheSize=50m● +UseCodeCacheFlushing
Defaults JDK 8 (Update 91)● +TieredCompilation● ReservedCodeCacheSize=250m● +UseCodeCacheFlushing
© [email protected] 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
© [email protected] 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=...
© [email protected] 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!
© [email protected] 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