SlideShare ist ein Scribd-Unternehmen logo
Brownbag:
Java Applikationen
und die JVM für “Ops”
Christian Rohmann Köln, 28.04.2017
1
Bei inovex seit Januar 2017
Standort: Köln
2
Christian Rohmann
LoB ITO - Systems Engineer Linux
› Grundlagen - Java und JVM
› Garbage Collection / Tuning
› JMX - Java Management Extensions
› Heap- / Thread Dumps
› Java Flight Recorder / Java Mission Control
3Java Applikationen und die JVM für “Ops”
Agenda
Was muss ich mir für die Pizza alles anhören?
› Klare Trennung der Zuständigkeiten?
› Java Code = Dev
› Java Runtime = Ops
› Spoiler: Nein!
4Java Applikationen und die JVM für “Ops”
Java Code and Java Runtime
“DevOps” as obvious as it gets
› (Java) Code wird in Bytecode kompiliert
› architektur-spezifische JavaVM -
“write once - run anywhere”
› Mehr als eine JVM (Oracle, OpenJDK, IBM, HP, …)
› HotSpot / JIT
› Bytecode -> Machine code / system calls
› Optimierung zur Laufzeit
› Memory Management automagisch
› Kein malloc(), kein free(), dafür Garbage Collection
5Java Applikationen und die JVM für “Ops”
Die Java Virtual Machine
The machine inside the machine (inside the machine)
› Security - SSL/Crypto libs sind in JVM“eingebaut”
* Bug Fix: Remove TrustCenter CA
* RC4 cipher suites have been removed from both client and server default enabled cipher suite
list in Oracle JSSE implementation
* Increase the minimum key length to 1024 for XML Signatures
* Correction of IllegalArgumentException from TLS handshake
› Abstraktion vom OS und dessen Updates
* JDK 8u51 contains IANA time zone data version 2015d
› Änderungen von defaults
* The default value for G1HeapWastePercent was changed from 10 to 5 to reduce the
need for full GCs. For the same reason the default value for G1MixedGCLiveThresholdPercent
was changed from 65 to 85.
6Java Applikationen und die JVM für “Ops”
Die Java Virtual Machine
Dev vs. Ops - JVM (minor) Updates ...
› Take away: JVM Updates = (security) patches
› Java Expiration Date: The expiration date for 8u121 is April 18, 2017. Java
expires whenever a new release with security vulnerability fixes becomes available.
› https://www.java.com/en/download/faq/release_changes.xml
› Parameter für Oracle JVM 8 (> 830)
› Take away: -XX:+PrintFlagsFinal
› Umstieg auf Java 8 / Java 9
› Code vs. JVM
7Java Applikationen und die JVM für “Ops”
Die Java Virtual Machine
Dev vs. Ops
8Java Applikationen und die JVM für “Ops”
JVM Heap Space
In der x-ten Generation
Quelle: https://de.wikipedia.org/wiki/Garbage_Collection
› Generational Garbage Collection
› “Eden” und “Survivors” - Young generation
› “Tenured” - Old generation
› JVM verwaltet Speicher
› Limits: -XX:InitialHeapSize // -XX:MaxHeapSize
› Take away: Xms = Xmx
› Take away: Xmx ist NICHT das Limit für dem JVM-Prozess
9Java Applikationen und die JVM für “Ops”
JVM Heap Space
Ein großer Haufen … Speicher
› GC konkurriert mit Applikation
› CPU cycles und hard real time (STW - GC pause)
› Unterschiedliche Implementierungen
(1. Serial - 1 Thread / CPU core )
2. Parallel bzw. Throughput (Multi-Threaded, wie viele?)
3. Concurrent-Mark-Sweep - CMS
4. G1 - Garbage First
› Teils mit (unendlich) vielen Optionen / Tuning-Parametern
› Auto-tuning (-XX:MaxGCPauseMillis / -XX:GCTimeRatio)
› Ergonomics (Anzahl CPU-cores, NUMA, TLAB, … )
10Java Applikationen und die JVM für “Ops”
JVM Garbage Collection
Ich dachte es kümmert sich einer™ drum …
-XX:CMSTriggerPermRatio=80 
-XX:CMSFullGCsBeforeCompaction=1 
-XX:+ParallelRefProcEnabled 
-XX:+CMSParallelRemarkEnabled 
-XX:CMSMaxAbortablePrecleanTime=6000 
-XX:CMSInitiatingOccupancyFraction=50 
-XX:+UseCMSInitiatingOccupancyOnly 
-XX:PretenureSizeThreshold=64m 
-XX:+CMSScavengeBeforeRemark 
-XX:ParallelGCThreads=6 
-XX:ConcGCThreads=6 
-XX:+UseParNewGC 
-XX:+UseConcMarkSweepGC 
-XX:MaxTenuringThreshold=8 
-XX:TargetSurvivorRatio=90 
-XX:SurvivorRatio=4 
-XX:NewRatio=2 
11Java Applikationen und die JVM für “Ops”
GC für eine Applikation tunen
How hard can it be?
12Java Applikationen und die JVM für “Ops”
JVM Garbage Collection
Wer bringt nun den Müll raus?
Young collector Old collector JVM option
Serial (DefNew) Serial Mark-Sweep-Compact -XX:+UseSerialGC
Parallel scavenge (PSYoungGen) Serial Mark-Sweep-Compact (PSOldGen) -XX:+UseParallelGC
Parallel scavenge (PSYoungGen) Parallel Mark-Sweep-Compact (ParOldGen) -XX:+UseParallelOldGC
Serial (DefNew) Concurrent Mark Sweep -XX:+UseConcMarkSweepGC
-XX:-UseParNewGC
Parallel (ParNew) Concurrent Mark Sweep -XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
G1 -XX:+UseG1GC
Quelle: http://blog.ragozin.info/2011/09/hotspot-jvm-garbage-collection-options.html
13Java Applikationen und die JVM für “Ops”
Strategien der GC Implementierungen
13
Quelle: http://www.techpaste.com/2012/02/java-garbage-collectors-gc/
› (Maximum) Pause Time
› Stop-The-World = Benutzer wartet
› Throughput
› garbage collection time vs. application time
› BigData / Batch / non-realtime
› Footprint
› microservices / horizontale Skalierung
› Gory Details zu JVM GC in der
Brownbag “Java-Optimierung” von Daniel Bäurer
14Java Applikationen und die JVM für “Ops”
Optimierungsziele für GC
Classic “pick two” (or less)
› JVM GC hat signifikante Auswirkungen auf die
Applikations-Performance
› Stop-The-World (STW)
› Anpassungen an HW (GC threads, NUMA, …)
15Java Applikationen und die JVM für “Ops”
Java Code vs. Java Runtime
Why should I (T Operations) care?
Take away ------------------>
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCCause
-XX:+PrintHeapAtGC
-XX:+PrintGCDateStamps
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintTenuringDistribution
-XX:+PrintAdaptiveSizePolicy
-Xloggc:/logs/jvm_gc.log
-XX:+UseGCLogFileRotation
-XX:GCLogFileSize=100M
-XX:NumberOfGCLogFiles=5
16Java Applikationen und die JVM für “Ops”
JVM Garbage Collection Logging
Warum ist was passiert?
Quelle: https://www.slideshare.net/leonjchen/java-gc-javadeveloperdaytw/36
› Korrelation zu anderen Metriken
› Dynamic bzgl. traffic, Requests/s, …
› 99%-lie
› Log Format ist unstrukturiert und GC-spezifisch
› Netflix gcviz / LinkedIn naarad
› G1 oft (noch) nicht unterstützt
› Parser as a Service:
› GCEasy (http://gceasy.io/)
› GCPlot (https://gcplot.com/)
› jClarity Censum (https://www.jclarity.com/censum/)
17Java Applikationen und die JVM für “Ops”
GC Logs auswerten / visualisieren
Wo ist mein Elch?
› Ein kleiner, open-source Lichtblick
URL: https://github.com/chewiebug/GCViewer
18Java Applikationen und die JVM für “Ops”
GC Logs auswerten / visualisieren
GCViewer
› OOM tötet … oder auch nicht
› Take away: -XX:OnOutOfMemoryError="kill -9 %p"
› GC overhead limit exceeded
› Mehr als 98% der Zeit in GC und < 2% recovered
› Take away: Meist nur der heap zu klein
› Automatischer Heap Dump bei OOM
› Take away:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=<path>
19Java Applikationen und die JVM für “Ops”
Was tun wenns trotzdem kracht?
Nach dem OOM ist vor dem OOM ...
› Post-Mortem bei OOM
› Jederzeit sonst!
› Unerlässlich auch bei kommerzieller Software!
› Analyse durch Hersteller
› Heap-Dump mit JVM Bordmitteln
› Take away:
jcmd <process id/main class> GC.heap_dump filename=heap.hprof
jmap -dump:format=b,file=heap.hprod pid
20Java Applikationen und die JVM für “Ops”
Heapdumps
Ja, wo laufen sie denn ...
› Heap-Dump mit GDB
› Take away:
gdb –pid=$JVM_PID
(gdb) gcore /tmp/jvm.core
Saved corefile /tmp/jvm.core
(gdb) detach
(gdb) quit
...
› Liste aller Threads und ihrer Status
› Take away: kill -3 $jvm_pid
› Output nach STDOUT
21Java Applikationen und die JVM für “Ops”
und Threaddumps
… wo laufen sie denn hin?
...
jmap
-dump:format=b,file=jvm.hprof
/usr/bin/java /tmp/jvm.core
› MBeans
› Metriken (z.B. Prometheus JMX Exporter)
› Operationen (GC auslösen, Settings ändern)
› Notifications
› Das “SNMP” der JVM
› Eigener TCP-Port
› TLS + Authentication
› JVM liefert viele Standard MBeans (z.B. GC)
› Applikationen, können und sollten selber MBeans
mitliefern!
22Java Applikationen und die JVM für “Ops”
JMX - Java Management Extensions
Der Diagnosestecker für die JVM (und die Applikation)
› JVM live analysieren
› Threads
› Locks
› Memory
› Heap Dumps laden
› Plugins wie z.B. VisualGC
URL: Teil von OracleJDK oder https://visualvm.github.io/
23
VisualVM
All-in-One Java Troubleshooting Tool
Java Applikationen und die JVM für “Ops”
› Post-Mortem-Analyze
von Heap Dumps
› Statistiken
› Drilldowns
URL: http://www.eclipse.org/mat/
24
Eclipse - Memory Analyzer Tool
Fast and feature-rich Java heap analyzer
Java Applikationen und die JVM für “Ops”
› Event Recorder “for collecting diagnostic and profiling data
about a running Java application [...] performance impact is
less than one percent”
› Ergänzung zu (teuren) APM Tools wie
New Relic / Dynatrace / AppDynamics
› ab JDK 7u40 verfügbar
› Nur in Oracle JDK
› In Produktion Oracle Java Lizenz erforderlich
25
Java Flight Recorder (JFR)
Die Black Box gegen die (JVM-)Blackbox
Java Applikationen und die JVM für “Ops”
› JFR per Command Line Option aktivieren
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
› ad-hoc recording
jcmd $jvm_pid JFR.start duration=600s filename=myrecording.jfr
› dauerhaft mitschreiben
-XX:FlightRecorderOptions=defaultrecording=true,disk=true, 
repository=/tmp/jfr, 
dumponexit=true, 
dumponexitpath=/var/log/jfr/ , 
maxage=48h, 
maxsize=2G, 
settings=default
26
Java Flight Recorder (JFR)
Die Black Box gegen die (JVM-)Blackbox
Java Applikationen und die JVM für “Ops”
› Teil der Tools des Oracle JDK
› Entstammt der JRockit VM
› Analyse live oder mittels JFR recordings
URL: http://oracle.com/missioncontrol
27
Java Mission Control
Houston - Wo ist das Problem?
Java Applikationen und die JVM für “Ops”
› Java gibts nicht ohne JVM
› “Write once, run anywhere” …. but how (well)?
“Bei so viel Automatik sind Mechanismen zum Monitoring und Performance-Tuning von
Anwendungen sehr wichtig. Im Fehlerfall oder bei ungenügender Performance soll die
Ursache schnell und sicher ermittelbar und idealerweise durch gezieltes Tuning
korrigierbar sein.” - codecentric Blog
28
Fazit
Java und JVM sind wie Dev und Ops
Java Applikationen und die JVM für “Ops”
Vielen Dank
Christian Rohmann
Systems Engineer Linux
Kupferhütte 4.1
Schanzenstraße 6-20
51063 Köln
christian.rohmann@inovex.de
29

Weitere ähnliche Inhalte

Ähnlich wie Brownbag: Java Applikationen und die JVM für „Ops“

Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Ralf Sigmund
 
Tanuki service wrapper_101
Tanuki service wrapper_101Tanuki service wrapper_101
Tanuki service wrapper_101inovex GmbH
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
OPEN KNOWLEDGE GmbH
 
Open icf (open identity connector framework) @ forgerock deutsch
Open icf (open identity connector framework) @ forgerock   deutschOpen icf (open identity connector framework) @ forgerock   deutsch
Open icf (open identity connector framework) @ forgerock deutsch
Hanns Nolan
 
WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"
camunda services GmbH
 
Java EE Microservices ohne Server
Java EE Microservices ohne ServerJava EE Microservices ohne Server
Java EE Microservices ohne Server
gedoplan
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Marc Müller
 
Java-Anwendungen betreiben mit Durchblick
Java-Anwendungen betreiben mit DurchblickJava-Anwendungen betreiben mit Durchblick
Java-Anwendungen betreiben mit Durchblick
Tobias Frech
 
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
Odilo Oehmichen
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
Patrick Baumgartner
 
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native WeltQuarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
Michael Frembs
 
Klappe auf! Was macht die JVM denn da? [Ger]
Klappe auf! Was macht die JVM denn da? [Ger]Klappe auf! Was macht die JVM denn da? [Ger]
Klappe auf! Was macht die JVM denn da? [Ger]
Tobias Frech
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
Marc Müller
 
JMeter + ELK - Event-basierte Daten != Logfiles in ELK
JMeter + ELK - Event-basierte Daten != Logfiles in ELKJMeter + ELK - Event-basierte Daten != Logfiles in ELK
JMeter + ELK - Event-basierte Daten != Logfiles in ELK
inovex GmbH
 
Microservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OSMicroservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OS
Ralf Ernst
 
FROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance TuningFROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance TuningFromDual GmbH
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
check_sap_health
check_sap_healthcheck_sap_health
check_sap_health
Gerhard Lausser
 
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQLInternet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQLFromDual GmbH
 
Crowdcode hitchhikers guide to java performance
Crowdcode hitchhikers guide to java performanceCrowdcode hitchhikers guide to java performance
Crowdcode hitchhikers guide to java performance
gedoplan
 

Ähnlich wie Brownbag: Java Applikationen und die JVM für „Ops“ (20)

Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
Tanuki service wrapper_101
Tanuki service wrapper_101Tanuki service wrapper_101
Tanuki service wrapper_101
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
 
Open icf (open identity connector framework) @ forgerock deutsch
Open icf (open identity connector framework) @ forgerock   deutschOpen icf (open identity connector framework) @ forgerock   deutsch
Open icf (open identity connector framework) @ forgerock deutsch
 
WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"WJAX 2012: Dreamteam "BPM + Java EE"
WJAX 2012: Dreamteam "BPM + Java EE"
 
Java EE Microservices ohne Server
Java EE Microservices ohne ServerJava EE Microservices ohne Server
Java EE Microservices ohne Server
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
 
Java-Anwendungen betreiben mit Durchblick
Java-Anwendungen betreiben mit DurchblickJava-Anwendungen betreiben mit Durchblick
Java-Anwendungen betreiben mit Durchblick
 
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
 
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native WeltQuarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
 
Klappe auf! Was macht die JVM denn da? [Ger]
Klappe auf! Was macht die JVM denn da? [Ger]Klappe auf! Was macht die JVM denn da? [Ger]
Klappe auf! Was macht die JVM denn da? [Ger]
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
 
JMeter + ELK - Event-basierte Daten != Logfiles in ELK
JMeter + ELK - Event-basierte Daten != Logfiles in ELKJMeter + ELK - Event-basierte Daten != Logfiles in ELK
JMeter + ELK - Event-basierte Daten != Logfiles in ELK
 
Microservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OSMicroservices and Container Management with Mesosphere DC/OS
Microservices and Container Management with Mesosphere DC/OS
 
FROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance TuningFROSCON 2011: MySQL Performance Tuning
FROSCON 2011: MySQL Performance Tuning
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
check_sap_health
check_sap_healthcheck_sap_health
check_sap_health
 
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQLInternet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
 
Crowdcode hitchhikers guide to java performance
Crowdcode hitchhikers guide to java performanceCrowdcode hitchhikers guide to java performance
Crowdcode hitchhikers guide to java performance
 

Mehr von inovex GmbH

lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
inovex GmbH
 
Are you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIAre you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AI
inovex GmbH
 
Why natural language is next step in the AI evolution
Why natural language is next step in the AI evolutionWhy natural language is next step in the AI evolution
Why natural language is next step in the AI evolution
inovex GmbH
 
WWDC 2019 Recap
WWDC 2019 RecapWWDC 2019 Recap
WWDC 2019 Recap
inovex GmbH
 
Network Policies
Network PoliciesNetwork Policies
Network Policies
inovex GmbH
 
Interpretable Machine Learning
Interpretable Machine LearningInterpretable Machine Learning
Interpretable Machine Learning
inovex GmbH
 
Jenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen UmgebungenJenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen Umgebungen
inovex GmbH
 
AI auf Edge-Geraeten
AI auf Edge-GeraetenAI auf Edge-Geraeten
AI auf Edge-Geraeten
inovex GmbH
 
Prometheus on Kubernetes
Prometheus on KubernetesPrometheus on Kubernetes
Prometheus on Kubernetes
inovex GmbH
 
Deep Learning for Recommender Systems
Deep Learning for Recommender SystemsDeep Learning for Recommender Systems
Deep Learning for Recommender Systems
inovex GmbH
 
Azure IoT Edge
Azure IoT EdgeAzure IoT Edge
Azure IoT Edge
inovex GmbH
 
Representation Learning von Zeitreihen
Representation Learning von ZeitreihenRepresentation Learning von Zeitreihen
Representation Learning von Zeitreihen
inovex GmbH
 
Talk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale AssistentenTalk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale Assistenten
inovex GmbH
 
Künstlich intelligent?
Künstlich intelligent?Künstlich intelligent?
Künstlich intelligent?
inovex GmbH
 
Dev + Ops = Go
Dev + Ops = GoDev + Ops = Go
Dev + Ops = Go
inovex GmbH
 
Das Android Open Source Project
Das Android Open Source ProjectDas Android Open Source Project
Das Android Open Source Project
inovex GmbH
 
Machine Learning Interpretability
Machine Learning InterpretabilityMachine Learning Interpretability
Machine Learning Interpretability
inovex GmbH
 
Performance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use casePerformance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use case
inovex GmbH
 
People & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessPeople & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madness
inovex GmbH
 
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with PulumiInfrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
inovex GmbH
 

Mehr von inovex GmbH (20)

lldb – Debugger auf Abwegen
lldb – Debugger auf Abwegenlldb – Debugger auf Abwegen
lldb – Debugger auf Abwegen
 
Are you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AIAre you sure about that?! Uncertainty Quantification in AI
Are you sure about that?! Uncertainty Quantification in AI
 
Why natural language is next step in the AI evolution
Why natural language is next step in the AI evolutionWhy natural language is next step in the AI evolution
Why natural language is next step in the AI evolution
 
WWDC 2019 Recap
WWDC 2019 RecapWWDC 2019 Recap
WWDC 2019 Recap
 
Network Policies
Network PoliciesNetwork Policies
Network Policies
 
Interpretable Machine Learning
Interpretable Machine LearningInterpretable Machine Learning
Interpretable Machine Learning
 
Jenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen UmgebungenJenkins X – CI/CD in wolkigen Umgebungen
Jenkins X – CI/CD in wolkigen Umgebungen
 
AI auf Edge-Geraeten
AI auf Edge-GeraetenAI auf Edge-Geraeten
AI auf Edge-Geraeten
 
Prometheus on Kubernetes
Prometheus on KubernetesPrometheus on Kubernetes
Prometheus on Kubernetes
 
Deep Learning for Recommender Systems
Deep Learning for Recommender SystemsDeep Learning for Recommender Systems
Deep Learning for Recommender Systems
 
Azure IoT Edge
Azure IoT EdgeAzure IoT Edge
Azure IoT Edge
 
Representation Learning von Zeitreihen
Representation Learning von ZeitreihenRepresentation Learning von Zeitreihen
Representation Learning von Zeitreihen
 
Talk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale AssistentenTalk to me – Chatbots und digitale Assistenten
Talk to me – Chatbots und digitale Assistenten
 
Künstlich intelligent?
Künstlich intelligent?Künstlich intelligent?
Künstlich intelligent?
 
Dev + Ops = Go
Dev + Ops = GoDev + Ops = Go
Dev + Ops = Go
 
Das Android Open Source Project
Das Android Open Source ProjectDas Android Open Source Project
Das Android Open Source Project
 
Machine Learning Interpretability
Machine Learning InterpretabilityMachine Learning Interpretability
Machine Learning Interpretability
 
Performance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use casePerformance evaluation of GANs in a semisupervised OCR use case
Performance evaluation of GANs in a semisupervised OCR use case
 
People & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madnessPeople & Products – Lessons learned from the daily IT madness
People & Products – Lessons learned from the daily IT madness
 
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with PulumiInfrastructure as (real) Code – Manage your K8s resources with Pulumi
Infrastructure as (real) Code – Manage your K8s resources with Pulumi
 

Brownbag: Java Applikationen und die JVM für „Ops“

  • 1. Brownbag: Java Applikationen und die JVM für “Ops” Christian Rohmann Köln, 28.04.2017 1
  • 2. Bei inovex seit Januar 2017 Standort: Köln 2 Christian Rohmann LoB ITO - Systems Engineer Linux
  • 3. › Grundlagen - Java und JVM › Garbage Collection / Tuning › JMX - Java Management Extensions › Heap- / Thread Dumps › Java Flight Recorder / Java Mission Control 3Java Applikationen und die JVM für “Ops” Agenda Was muss ich mir für die Pizza alles anhören?
  • 4. › Klare Trennung der Zuständigkeiten? › Java Code = Dev › Java Runtime = Ops › Spoiler: Nein! 4Java Applikationen und die JVM für “Ops” Java Code and Java Runtime “DevOps” as obvious as it gets
  • 5. › (Java) Code wird in Bytecode kompiliert › architektur-spezifische JavaVM - “write once - run anywhere” › Mehr als eine JVM (Oracle, OpenJDK, IBM, HP, …) › HotSpot / JIT › Bytecode -> Machine code / system calls › Optimierung zur Laufzeit › Memory Management automagisch › Kein malloc(), kein free(), dafür Garbage Collection 5Java Applikationen und die JVM für “Ops” Die Java Virtual Machine The machine inside the machine (inside the machine)
  • 6. › Security - SSL/Crypto libs sind in JVM“eingebaut” * Bug Fix: Remove TrustCenter CA * RC4 cipher suites have been removed from both client and server default enabled cipher suite list in Oracle JSSE implementation * Increase the minimum key length to 1024 for XML Signatures * Correction of IllegalArgumentException from TLS handshake › Abstraktion vom OS und dessen Updates * JDK 8u51 contains IANA time zone data version 2015d › Änderungen von defaults * The default value for G1HeapWastePercent was changed from 10 to 5 to reduce the need for full GCs. For the same reason the default value for G1MixedGCLiveThresholdPercent was changed from 65 to 85. 6Java Applikationen und die JVM für “Ops” Die Java Virtual Machine Dev vs. Ops - JVM (minor) Updates ...
  • 7. › Take away: JVM Updates = (security) patches › Java Expiration Date: The expiration date for 8u121 is April 18, 2017. Java expires whenever a new release with security vulnerability fixes becomes available. › https://www.java.com/en/download/faq/release_changes.xml › Parameter für Oracle JVM 8 (> 830) › Take away: -XX:+PrintFlagsFinal › Umstieg auf Java 8 / Java 9 › Code vs. JVM 7Java Applikationen und die JVM für “Ops” Die Java Virtual Machine Dev vs. Ops
  • 8. 8Java Applikationen und die JVM für “Ops” JVM Heap Space In der x-ten Generation Quelle: https://de.wikipedia.org/wiki/Garbage_Collection
  • 9. › Generational Garbage Collection › “Eden” und “Survivors” - Young generation › “Tenured” - Old generation › JVM verwaltet Speicher › Limits: -XX:InitialHeapSize // -XX:MaxHeapSize › Take away: Xms = Xmx › Take away: Xmx ist NICHT das Limit für dem JVM-Prozess 9Java Applikationen und die JVM für “Ops” JVM Heap Space Ein großer Haufen … Speicher
  • 10. › GC konkurriert mit Applikation › CPU cycles und hard real time (STW - GC pause) › Unterschiedliche Implementierungen (1. Serial - 1 Thread / CPU core ) 2. Parallel bzw. Throughput (Multi-Threaded, wie viele?) 3. Concurrent-Mark-Sweep - CMS 4. G1 - Garbage First › Teils mit (unendlich) vielen Optionen / Tuning-Parametern › Auto-tuning (-XX:MaxGCPauseMillis / -XX:GCTimeRatio) › Ergonomics (Anzahl CPU-cores, NUMA, TLAB, … ) 10Java Applikationen und die JVM für “Ops” JVM Garbage Collection Ich dachte es kümmert sich einer™ drum …
  • 11. -XX:CMSTriggerPermRatio=80 -XX:CMSFullGCsBeforeCompaction=1 -XX:+ParallelRefProcEnabled -XX:+CMSParallelRemarkEnabled -XX:CMSMaxAbortablePrecleanTime=6000 -XX:CMSInitiatingOccupancyFraction=50 -XX:+UseCMSInitiatingOccupancyOnly -XX:PretenureSizeThreshold=64m -XX:+CMSScavengeBeforeRemark -XX:ParallelGCThreads=6 -XX:ConcGCThreads=6 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=8 -XX:TargetSurvivorRatio=90 -XX:SurvivorRatio=4 -XX:NewRatio=2 11Java Applikationen und die JVM für “Ops” GC für eine Applikation tunen How hard can it be?
  • 12. 12Java Applikationen und die JVM für “Ops” JVM Garbage Collection Wer bringt nun den Müll raus? Young collector Old collector JVM option Serial (DefNew) Serial Mark-Sweep-Compact -XX:+UseSerialGC Parallel scavenge (PSYoungGen) Serial Mark-Sweep-Compact (PSOldGen) -XX:+UseParallelGC Parallel scavenge (PSYoungGen) Parallel Mark-Sweep-Compact (ParOldGen) -XX:+UseParallelOldGC Serial (DefNew) Concurrent Mark Sweep -XX:+UseConcMarkSweepGC -XX:-UseParNewGC Parallel (ParNew) Concurrent Mark Sweep -XX:+UseConcMarkSweepGC -XX:+UseParNewGC G1 -XX:+UseG1GC Quelle: http://blog.ragozin.info/2011/09/hotspot-jvm-garbage-collection-options.html
  • 13. 13Java Applikationen und die JVM für “Ops” Strategien der GC Implementierungen 13 Quelle: http://www.techpaste.com/2012/02/java-garbage-collectors-gc/
  • 14. › (Maximum) Pause Time › Stop-The-World = Benutzer wartet › Throughput › garbage collection time vs. application time › BigData / Batch / non-realtime › Footprint › microservices / horizontale Skalierung › Gory Details zu JVM GC in der Brownbag “Java-Optimierung” von Daniel Bäurer 14Java Applikationen und die JVM für “Ops” Optimierungsziele für GC Classic “pick two” (or less)
  • 15. › JVM GC hat signifikante Auswirkungen auf die Applikations-Performance › Stop-The-World (STW) › Anpassungen an HW (GC threads, NUMA, …) 15Java Applikationen und die JVM für “Ops” Java Code vs. Java Runtime Why should I (T Operations) care?
  • 17. › Korrelation zu anderen Metriken › Dynamic bzgl. traffic, Requests/s, … › 99%-lie › Log Format ist unstrukturiert und GC-spezifisch › Netflix gcviz / LinkedIn naarad › G1 oft (noch) nicht unterstützt › Parser as a Service: › GCEasy (http://gceasy.io/) › GCPlot (https://gcplot.com/) › jClarity Censum (https://www.jclarity.com/censum/) 17Java Applikationen und die JVM für “Ops” GC Logs auswerten / visualisieren Wo ist mein Elch?
  • 18. › Ein kleiner, open-source Lichtblick URL: https://github.com/chewiebug/GCViewer 18Java Applikationen und die JVM für “Ops” GC Logs auswerten / visualisieren GCViewer
  • 19. › OOM tötet … oder auch nicht › Take away: -XX:OnOutOfMemoryError="kill -9 %p" › GC overhead limit exceeded › Mehr als 98% der Zeit in GC und < 2% recovered › Take away: Meist nur der heap zu klein › Automatischer Heap Dump bei OOM › Take away: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path> 19Java Applikationen und die JVM für “Ops” Was tun wenns trotzdem kracht? Nach dem OOM ist vor dem OOM ...
  • 20. › Post-Mortem bei OOM › Jederzeit sonst! › Unerlässlich auch bei kommerzieller Software! › Analyse durch Hersteller › Heap-Dump mit JVM Bordmitteln › Take away: jcmd <process id/main class> GC.heap_dump filename=heap.hprof jmap -dump:format=b,file=heap.hprod pid 20Java Applikationen und die JVM für “Ops” Heapdumps Ja, wo laufen sie denn ...
  • 21. › Heap-Dump mit GDB › Take away: gdb –pid=$JVM_PID (gdb) gcore /tmp/jvm.core Saved corefile /tmp/jvm.core (gdb) detach (gdb) quit ... › Liste aller Threads und ihrer Status › Take away: kill -3 $jvm_pid › Output nach STDOUT 21Java Applikationen und die JVM für “Ops” und Threaddumps … wo laufen sie denn hin? ... jmap -dump:format=b,file=jvm.hprof /usr/bin/java /tmp/jvm.core
  • 22. › MBeans › Metriken (z.B. Prometheus JMX Exporter) › Operationen (GC auslösen, Settings ändern) › Notifications › Das “SNMP” der JVM › Eigener TCP-Port › TLS + Authentication › JVM liefert viele Standard MBeans (z.B. GC) › Applikationen, können und sollten selber MBeans mitliefern! 22Java Applikationen und die JVM für “Ops” JMX - Java Management Extensions Der Diagnosestecker für die JVM (und die Applikation)
  • 23. › JVM live analysieren › Threads › Locks › Memory › Heap Dumps laden › Plugins wie z.B. VisualGC URL: Teil von OracleJDK oder https://visualvm.github.io/ 23 VisualVM All-in-One Java Troubleshooting Tool Java Applikationen und die JVM für “Ops”
  • 24. › Post-Mortem-Analyze von Heap Dumps › Statistiken › Drilldowns URL: http://www.eclipse.org/mat/ 24 Eclipse - Memory Analyzer Tool Fast and feature-rich Java heap analyzer Java Applikationen und die JVM für “Ops”
  • 25. › Event Recorder “for collecting diagnostic and profiling data about a running Java application [...] performance impact is less than one percent” › Ergänzung zu (teuren) APM Tools wie New Relic / Dynatrace / AppDynamics › ab JDK 7u40 verfügbar › Nur in Oracle JDK › In Produktion Oracle Java Lizenz erforderlich 25 Java Flight Recorder (JFR) Die Black Box gegen die (JVM-)Blackbox Java Applikationen und die JVM für “Ops”
  • 26. › JFR per Command Line Option aktivieren -XX:+UnlockCommercialFeatures -XX:+FlightRecorder › ad-hoc recording jcmd $jvm_pid JFR.start duration=600s filename=myrecording.jfr › dauerhaft mitschreiben -XX:FlightRecorderOptions=defaultrecording=true,disk=true, repository=/tmp/jfr, dumponexit=true, dumponexitpath=/var/log/jfr/ , maxage=48h, maxsize=2G, settings=default 26 Java Flight Recorder (JFR) Die Black Box gegen die (JVM-)Blackbox Java Applikationen und die JVM für “Ops”
  • 27. › Teil der Tools des Oracle JDK › Entstammt der JRockit VM › Analyse live oder mittels JFR recordings URL: http://oracle.com/missioncontrol 27 Java Mission Control Houston - Wo ist das Problem? Java Applikationen und die JVM für “Ops”
  • 28. › Java gibts nicht ohne JVM › “Write once, run anywhere” …. but how (well)? “Bei so viel Automatik sind Mechanismen zum Monitoring und Performance-Tuning von Anwendungen sehr wichtig. Im Fehlerfall oder bei ungenügender Performance soll die Ursache schnell und sicher ermittelbar und idealerweise durch gezieltes Tuning korrigierbar sein.” - codecentric Blog 28 Fazit Java und JVM sind wie Dev und Ops Java Applikationen und die JVM für “Ops”
  • 29. Vielen Dank Christian Rohmann Systems Engineer Linux Kupferhütte 4.1 Schanzenstraße 6-20 51063 Köln christian.rohmann@inovex.de 29