首页 > 技术文章 > JVM性能调优

nsw2018 2016-10-13 16:11 原文

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分别把最后两行#去掉。

推荐阅读