JVM性能调优
http://blog.csdn.net/ning109314/article/details/10411495/
http://www.mamicode.com/info-detail-1028149.html
http://uule.iteye.com/blog/2114697
http://blog.csdn.net/llbupt/article/details/6661183
http://blog.csdn.net/hengyunabc/article/details/24924843
http://blog.csdn.net/zhoutao198712/article/details/7783038
http://blog.csdn.net/fenglibing/article/details/6298326(mat)
http://www.blogjava.net/rosen/archive/2010/06/13/323522.html(mat)
jmap -F -dump:format=b,file=j.bin 6664
jstat -gcutil pid
开启jmx连接jvm
linux下tomcat版本7.0
jdk版本1.8
开启tomcat的jmx,远程jvm查看运行情况
找到tomcat 的bin目录。
打开catalina.sh文件。
找到242行左右。
# ----- Execute The Requested Command -----------------------------------------
在此添加如下内容:
123.56.**.**为主机IP地址,端口为9999.
[ $1 != "stop" ] && JAVA_OPTS="-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=123.56.**.**
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false $JAVA_OPTS"
export JAVA_OPTS
重新启动tomcat后,如果9999端口启动了。
使用jconsle,或jvisual来连接。
设置jvm大小:
内存16G。
JAVA_OPTS="-Xms1024m -Xmx2048m -Xss1024K -XX:PermSize=512m -XX:MaxPermSize=1024m"
xms是heap大小的初始值1G
xmx是heap最大值为4G
xms最好=xmx。
xss表示一个线程的大小,jdk5后默认为1m。太大,产生不了过多的线程数。
permSize是永久区的大小,加载class类等附加信息。(jdk1.8不支持,加上也行,可以通过,由native memory inside JVM代替)
PermSize不可大于Xmx。
元空间(Metaspace)
jdk1.8使用参数MaxMetaspaceSize(-XX:MaxMetaspaceSize=256m)
MaxMetaspaceSize用于限制本地内存分配给类元数据的大小。如果没有指定这个参数,元空间会在运行时根据需要动态调整。
-XX:NewSize=n:设置年轻代大小
-XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值.注意Survivor区有两个.如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5 .
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=mem.dump
heap出现溢出时,保留日志信息,使用jhat分析。
以下为jmx服务添加验证
http://docs.oracle.com/javase/6/docs/technotes/guides/management/agent.html
chmod 600 jmxremote.password(cp jmxremote.password.template --> jmxremote.password)
chmod 600 jmxremote.access
(有可能报错)
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.access.file=FilePath
-Dcom.sun.management.jmxremote.password.file=FilePath
jmxremote.access,jmxremote.password文件在JDK安装目录/jre/lib/management/*
jmxremote.access,jmxremote.password分别把最后两行#去掉。