Agenda
memory model
3 parts: heap, permgen (method area) , thread stack(pointer, local var)
heap: young and old generation ?? permanent generation
young: eden, fromspace(surviror1), tospace(surironr2)
== quoted ==
To get the clear memory diagram:http://blog.pointsoftware.ch/index.php/under-the-hood-runtime-data-areas-javas-memory-model/
http://www.yourkit.com/docs/kb/sizes.jsp
http://www.slideshare.net/gengmao/inside-the-jvm-memory-management-and-troubleshooting
PermGen
The method area is also known as the permanent generation space (PermGen). Allclass data are loaded into this memoryspace. This includes the field and method data and the code for the methods andconstructors
Heapmemory
Sinceobjects are stored in the heap part it is worth to have a closer look. The heapspace itself is again separated into several spaces:
-Young generation with eden and survivor space
-Old Generation with tenured space
Eachspace harbors objects with different life cycles:
-New/short-term objects are instantiated in theeden space.
-Survived/mid-term objects are copied from theeden space to the survivor space.
== unquoted ==
jvm setting
GC algorithm: serial, ... etc, MaxNewSize, MaxSize , there is recommendation online, client side, server side and diff platform.
JavaOne: best heap percent :43% ??
tunning concerns
availablility , throughput, latency and responsiveness, memory footprint (100 txn need how many mem?), startup time
real time profiling
Remote
Add JMX parameter to bootstrap script
$JAVA_HOME/bin/java ${GC_OPTS}
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-classpath $PROJ_CLASSPATH ${BOOTSTRAPPER} ${PARAMETER}
Local
VisualVM/Jconsole is able to detect the running JAVA application process id..
http://www.gamlor.info/wordpress/2011/09/visualvm/
Eclipse for VisualVM (https://visualvm.java.net/eclipse-launcher.html)
JMX profile ?! - linux svr profile , like shell
server port number?! - need ask server team
Will it cause the app slowness? - yes, occupy CPU
post gc analysis
Enable the verbose:gc option in the bootstrap script
-verbose:gc
-Xms512m -Xmx1024m
-XX:+PrintGCTimestamps
-XX:+PrintGCDetails
-Xloggc:./${GC_LOG}
After the log file generated, you can use the tool to analyse. - GC Histogram Tool
All GC
Young GC - GC in young generation ?
Full GC -
Good tips:
Eclipse plugin center - for you to goto there via company proxy,
1. check from stackoverflow site - Add parm into eclipse.ini ;
2. disable socket proxy port
Websphere JVM profiling on app server
Ask WAS team to install a was plugin into for monitor