Professional Documents
Culture Documents
SpringOne2014 LariHotari PerformancetuningGrailsapplications
SpringOne2014 LariHotari PerformancetuningGrailsapplications
Grails applications
by Lari Hotari @lhotari
2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
Performance aspects
Latency of operations
Throughput of operations
Quality of operations - efficiency, usability,
responsiveness, correctness, consistency, integrity,
reliability, availability, resilience, robustness,
recoverability, security, safety, maintainability
Amdahl's law
Little's law
L = W
MeanNumberInSystem = MeanThroughput * MeanResponseTime
TL;DR
Lari's Grails Performance
Tuning Method
2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
11
efficiency
usability
responsiveness
correctness
consistency / integrity /
reliability
availability
resilience / robustness /
recoverability
security / safety
maintainability
!
!
!
12
Operational efficiency
Tuning your system to meet it's quality requirements
with optimal cost
Optimising costs to run your system - operational
efficiency
13
2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
Measure
& profile
Think
and
Learn
Performance
tuning feedback
cycle
Do
tuning
and
fixes
15
16
17
2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
20
22
23
2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
Instrumentation
o
25
26
27
29
30
!
1
2
3
4
5
6
7
8
9
10
11
12
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_60
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
CATALINA_OPTS="$CATALINA_OPTS -server -noverify"
CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=256M -Xms768M -Xmx768M" # tune heap size
CATALINA_OPTS="$CATALINA_OPTS -Djava.net.preferIPv4Stack=true" # disable IPv6 if not used
# set default file encoding and locale
CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=UTF-8 -Duser.language=en -Duser.country=US"
CATALINA_OPTS="$CATALINA_OPTS -Duser.timezone=CST" # set default timezone
CATALINA_OPTS="$CATALINA_OPTS -Dgrails.env=production" # set grails environment
# set timeouts for JVM URL handler
CATALINA_OPTS="$CATALINA_OPTS -Dsun.net.client.defaultConnectTimeout=10000
-Dsun.net.client.defaultReadTimeout=10000"
13 CATALINA_OPTS="$CATALINA_OPTS -Duser.dir=$CATALINA_HOME" # set user.dir
14 export CATALINA_OPTS
15 export CATALINA_PID="$CATALINA_HOME/logs/tomcat.pid"
31
34
https://twitter.com/lhotari/status/474591343923449856
35
37
38
40
2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
42
44
Controlling JFR
enabling JFR with default continuous "black box"
recording:
export _JAVA_OPTIONS="-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder
-XX:FlightRecorderOptions=defaultrecording=true"
<pid>
<pid>
<pid>
<pid>
help
help
help
help
JFR.start
JFR.stop
JFR.dump
JFR.check
45
Demo
2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
47
Questions?
2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.
Thanks!
Lari Hotari @lhotari
Pivotal Software, Inc.
2014 SpringOne 2GX. All rights reserved. Do not distribute without permission.