If you can't read please download the document
Upload
tomek-borek
View
1.134
Download
1
Embed Size (px)
Citation preview
Strojenie Wirtualnej Maszyny Java
JVM Tuning in a rush
Tomasz Borek, Symentis
Infected in childhood From me parents
Amstrad, ElWro Junior
Games! Doh!
Mem pages in DOS anyone?
In IT ETL, crawlers, web-app, archi
IAAS, SAAS, own servers
Java 4 7, GNU/Linux, SQLs
Ardent activist
Tomasz Borek
Can be found in the net! :P
https://lafkblogs.wordpress.com/https://twitter.com/lafk_plhttps://pl.linkedin.com/in/tjborek
GeeCON, ChamberConf, Confitura, Lambda Days, LambdaCon, Java Developer Days, JavaDay Lviv, JavaDay Kiev
Tomek in IT groups
.comhttp://java.plKrakwPoznaPragaSopothttp://geecon.org
Prod hits rock bottom
Everybody is kung-fu fighting
Must be quick like lightning
So! Being a dev, you need:
To know your traffic and your app and your infra
So! Being a dev, you need:
To know your traffic and your app and your infra
To know recent changes
So! Being a dev, you need:
To know your traffic and your app and your infra
To know recent changes
To know your limits (sometimes comes from point 1)
So! Being a dev, you need:
To know your traffic and your app and your infra
To know recent changes
To know your limits (sometimes comes from point 1)
To have access to monitoring
So! Being a dev, you need:
To know your traffic and your app and your infra
To know recent changes
To know your limits (sometimes comes from point 1)
To have access to monitoring
To adjust pooling (both thread and connection)
So! Being a dev, you need:
To know your traffic and your app and your infra
To know recent changes
To know your limits (sometimes comes from point 1)
To have access to monitoring
To adjust pooling (both thread and connection)
To peruse logs and pull out anomalies
So! Being a dev, you need:
To know your traffic and your app and your infra
To know recent changes
To know your limits (sometimes comes from point 1)
To have access to monitoring
To adjust pooling (both thread and connection)
To peruse logs and pull out anomalies
TO TUNE JVM
So! Being a dev, you need:
To know your traffic and your app and your infra
To know recent changes
To know your limits (sometimes comes from point 1)
To have access to monitoring
To adjust pooling (both thread and connection)
To peruse logs and pull out anomalies
TO TUNE JVM
JVM? Meaning?
Sun Hotspot
IBM
JRockit
IceTea
OpenJDK
TCK decides
JVM? Meaning?
Sun Hotspot
IBM
JRockit
IceTea
OpenJDK
TCK decides
JVM? Meaning?
Sun Hotspot but which version?
IBM
JRockit
IceTea
OpenJDK
TCK decides
JVM? Meaning?
Sun Hotspot but which version? And architecture?
IBM
JRockit
IceTea
OpenJDK
TCK decides
So! JVM tuning?
To adjust GC, based on it's logs
So! JVM tuning?
To adjust GC, based on it's logs
To adjust (native) heap
So! JVM tuning?
To adjust GC, based on it's logs
To adjust (native) heap
Tweaking JVM starting flags
So! JVM tuning?
To adjust GC, based on it's logs
To adjust (native) heap
Tweaking JVM starting flags
To use TOOLS
Today!
JVM tuning
Diagnosing performance problems
Tools
All in a rush
JVM tuning
Takeaway #1
JVM is a process
Being a process means
OS architecture enforces JVM architecture
Your memory is limited by OS and other processesHeap is one
C-heap is another!
IO-wise and thread-wise: Your threads and files opened are limited by ulimitFile descriptors!
OOM flavours?
OOM flavours
Out of HeapSpace
OOM flavours
Out of HeapSpace
PermGen error
OOM flavours
Out of HeapSpace
PermGen error
Unable to create native thread
API says OutOfMemoryError is
Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. OutOfMemoryError objects may be constructed by the virtual machine as if suppression were disabled and/or the stack trace was not writable.
API says OutOfMemoryError is
Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. OutOfMemoryError objects may be constructed by the virtual machine as if suppression were disabled and/or the stack trace was not writable.
API says OutOfMemoryError is
Due to failure in allocating an object after garbage collection.
Nothing about threads.
Nothing about PermGen.
How much memory JVM uses?
Say you start it with Xmx == Xms == 1GB
How much memory JVM uses?
Say you start it with Xmx == Xms == 1GB
1GB?
How much memory JVM uses?
Say you start it with Xmx == Xms == 1GB
1GB?
Around 1GB?
How much memory JVM uses?
Say you start it with Xmx == Xms == 1GB
1GB?
Around 1GB?
If we talk about Java HEAP
Memory management
Entire RAM
32 bits: can address less than 4GB.
64 bits: can address theoretically 16 EB.Still much more!
There's much more to 32vs64 but that's for another time
Memory management
Entire RAMWhat's left of RAM C-HEAPJVM heap-Xmx
-Xms minimal heap size
-Xmx maximal heap size
When both should be set to same value?
Memory management
Entire RAMWhat's left of RAM C-HEAPJVM heapWhat's left C-HEAPJVM opsJVM heap-Xmx
PermGen
PermGen
Permanent GenerationEarly Java
for JDK classes
and Strings
Back then good idea
Now removedJDK 7 Strings no longer in PermGen
JDK 8 no PermGen at all
PermGen
Permanent GenerationEarly Java
for JDK classes
and Strings
Back then good idea
Now removedJDK 7 Strings no longer in PermGen
JDK 8 no PermGen at all
Quick fix?Increase PermGen size.
Memory management
What's left C-HEAPJVM opsJVM heap-Xmx
PermGen
GC
When it runs?
GC
When it runs?
Minor collection?
GC
When it runs?
Minor collection?
Major collection?
GC
When it runs?
Minor collection?
Major collection?
How can a dev tune GC?
Generational GC
Tenured where long-lived are promotedEden infants that die quickly
Studies showed:most objects die young
Some live really long
Ergo: short- and long-lived division
Minor collection: Eden
Major collection: whole heap
Generational GC - mechanics
In fact Eden has also 2 Survivor spacesTo handle locality
Helps compress after freeing space
First promotion to survivor, then to tenured
Flags tell:How many GCs object must survive to be promoted
How large Eden / Tenured / Survivors spaces are
What is logged (how details GC logs are)
Many, MANY more
Memory management trade-offs
Large heap large full GC small native and C-heap?
Smaller heap minor GC may be enough
Make sure your objects die young and only really long lived reach tenured
JVM tuning
To adjust GC, based on it's logs
To adjust (native) heap
Tweaking JVM starting flags
To use TOOLS later
Takeaway #2
Log GC
Takeaway #3
GC tuning is a trade-off
Diagnosing performance problems
The Box
Heinz Kabutz, Kirk Pepperdine
Top - bottom
The Box
TRAFFIC: ?
TRAFFIC
The Box
TRAFFIC: how is app used?
TRAFFIC: people, automatic
The Box
TRAFFIC: how is app used?
CODE: ?
TRAFFIC: people, automaticApplication CODE
The Box
TRAFFIC: how is app used?
CODE: threads, algos, data structures...
TRAFFIC: people, automaticCODE: threads, data structs, algo
The Box
TRAFFIC: how is app used?
CODE: threads, algos, data structures...
JVM: ?
TRAFFIC: people, automaticCODE: threads, data structs, algoJVM
The Box
TRAFFIC: how is app used?
CODE: threads, algos, data structures...
JVM: ?
TRAFFIC: people, automaticCODE: threads, data structs, algoJVM: flags, GC
The Box
TRAFFIC: how is app used?
CODE: threads, algos, data structures...
JVM: starting flags, GC
OS: ?
TRAFFIC: people, automaticCODE: threads, data structs, algoJVM: flags, GCOS
The Box
TRAFFIC: how is app used?
CODE: threads, algos, data structures...
JVM: starting flags, GC
OS: ulimit, FS, config, archi, other procs
TRAFFIC: people, automaticCODE: threads, data structs, algoJVM: flags, GCOS: FS, config, limits
The Box
TRAFFIC: how is app used?
CODE: threads, algos, data structures...
JVM: starting flags, GC
OS: ulimit, FS, config, archi, other procs
VIRT: ?
TRAFFIC: people, automaticCODE: threads, data structs, algoJVM: flags, GCOS: FS, config, limitsVIRT
The Box
TRAFFIC: how is app used?
CODE: threads, algos, data structures...
JVM: starting flags, GC
OS: ulimit, FS, config, archi, other procs
VIRT: hell depends!
TRAFFIC: people, automaticCODE: threads, data structs, algoJVM: flags, GCOS: FS, config, limitsVIRT
The Box
TRAFFIC: how is app used?
CODE: threads, algos, data structures...
JVM: starting flags, GC
OS: ulimit, FS, config, archi, other procs
VIRT: hell depends!
HARDWARE: ?
TRAFFIC: people, automaticCODE: threads, data structs, algoJVM: flags, GCOS: FS, config, limitsVIRTHARDWARE
The Box
TRAFFIC: how is app used?
CODE: threads, algos, data structures...
JVM: starting flags, GC
OS: ulimit, FS, config, archi, other procs
VIRT: hell depends!
HARDWARE: 32 vs 64, RAM, BIOS, drivers
TRAFFIC: people, automaticCODE: threads, data structs, algoJVM: flags, GCOS: FS, config, limitsVIRTHARDWARE
Brendan Gregg USE
Utilization, Saturation, Errors
Use how much in use is your resource
Saturation how many requests await (waiting queue)
Errors what errors are thrown by resource
http://www.brendangregg.com/usemethod.html
Create a checklist for each important resource, for finding out Utilization, Saturation and Errors and you'll know how to soon find out what is going on with resource
Takeaway #1
The Box
Takeaway #2
GNU/Linux perf? Brendan Gregg
TOOLS
Takeaway #1
GNU/Linux surely has a tool for that
How to find your java process?
ps | grep java
How to find your java process?
ps | grep java
pgrep java
How to find your java process?
ps | grep java
pgrep java
jps
How to change flags on-the-fly?
jinfo
How to dump threads or heap?
kill -3
How to dump threads or heap?
kill -3
jstack
How to dump threads or heap?
kill -3
jstack
jhat (heap)
jvisualvm
Deserves it's own slide
Profiler, sampler
Monitor (heap, threads, etc.)
Calls GC, does dumps
SUMMARIZING
For being rushed prepare in advanceMonitoring, logs, ceilings, etc.
Log GC
JVM is a process all process limits in your OS apply
The Box
Brendan Gregg
GNU/Linux tools unparalleled
?
Kliknij, aby edytowa styl
Kliknij, aby edytowa style wzorca tekstuDrugi poziomTrzeci poziomCzwarty poziomPity poziom
04/08/15
Kliknij, aby edytowa styl
Kliknij, aby edytowa styl wzorca podtytuu
04/08/15
Kliknij, aby edytowa styl
Kliknij, aby edytowa style wzorca tekstu
Drugi poziom
Trzeci poziom
Czwarty poziom
Pity poziom
04/08/15
Kliknij, aby edytowa styl
Kliknij, aby edytowa style wzorca tekstu
04/08/15
Kliknij, aby edytowa styl
Kliknij, aby edytowa style wzorca tekstu
Drugi poziom
Trzeci poziom
Czwarty poziom
Pity poziom
Kliknij, aby edytowa style wzorca tekstu
Drugi poziom
Trzeci poziom
Czwarty poziom
Pity poziom
04/08/15
Kliknij, aby edytowa styl
Kliknij, aby edytowa style wzorca tekstu
Kliknij, aby edytowa style wzorca tekstu
Drugi poziom
Trzeci poziom
Czwarty poziom
Pity poziom
Kliknij, aby edytowa style wzorca tekstu
Kliknij, aby edytowa style wzorca tekstu
Drugi poziom
Trzeci poziom
Czwarty poziom
Pity poziom
04/08/15
Kliknij, aby edytowa styl
04/08/15
04/08/15
Kliknij, aby edytowa styl
Kliknij, aby edytowa style wzorca tekstu
Drugi poziom
Trzeci poziom
Czwarty poziom
Pity poziom
Kliknij, aby edytowa style wzorca tekstu
04/08/15
Kliknij, aby edytowa styl
Kliknij, aby edytowa style wzorca tekstu
04/08/15
Kliknij, aby edytowa styl
Kliknij, aby edytowa style wzorca tekstuDrugi poziomTrzeci poziomCzwarty poziomPity poziom
04/08/15
Kliknij, aby edytowa styl
Kliknij, aby edytowa style wzorca tekstuDrugi poziomTrzeci poziomCzwarty poziomPity poziom
04/08/15
Kliknij, aby edytowa format tekstu konspektuDrugi poziom konspektuTrzeci poziom konspektuCzwarty poziom konspektuPity poziom konspektuSzsty poziom konspektuSidmy poziom konspektusmy poziom konspektuDziewity poziom konspektu
@LAFK_pl