jvm 调优

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:14   2316   0

1.jstat -gcutil pid 1000 (查看gc和fullgc的回收频率等信息)

2 top -H -p pid (查看一个进程中所有线程的情况)

3.jstack pid > xxx.log (查看某个线程栈的日志,可以分析其中那些代码有问题)

jmap -heap pid 查看当前堆中对象,可以>>到文件中看前几个,他是按照对象的数量进行排序了的

4.通过jmc 仅支持1.7.0_40及以上版本

1.XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr
加到jvm参数里
2.-XX:+UnlockCommercialFeatures -XX:+FlightRecorder。通过执行jcmd pid JFR.start duration=60s filename=myrecording.jfr来灵活的运行分析

5.jvm 参数常用配置(cms gc方式的[并发gc])

-Xms6g -Xmx6g -XX:PermSize=96m -XX:MaxPermSize=384m -Xmn2g -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSMaxAbortablePrecleanTime=5000 -XX:+CMSClassUnloadingEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=65 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/java.hprof -verbose:gc -Xloggc:/data/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=10000 -Dsun.net.client.defaultReadTimeout=30000 -XX:+DisableExplicitGC -Djava.net.preferIPv4Stack=true


-Xmn是总堆的1/4 初始堆和最大堆最好设置一样大,减少堆内存的分配


问题:CMS GC时出现promotion failed和concurrent mode failure

年轻代相对于年老带设置的稍大,年老带的触发fullgc的百分比阀值设置的大就会造成上面的问题

堆空间分布:Survivor0,Survivor1,eden ,old,perm

1.如果有很多对象产生的应用并且周期长,有可能进入old区的,那么 年轻代和年老带的比例最好分成1:3,同时old的fullgc百分比配置65%最好,计算公式如下:加入年轻代1G,年老带3G,执行fullgc区域的百分比配置65% ,通过计算Survivor0:Survivor1:eden = 1:1:4 那么eden区占用667M

old达到65%正常剩余空间为3*0.35 = 1.05G,就算进行yonggc把所有的年轻代空间的数据都放到old区的剩余空间也是能放得下的

案例:eden满,两个交换区满,old区达到65%,在以上情况下肯定要出发fullgc,要是old区剩余的空间不足,那么fullgc就会触发很长时间,应用会出现长时间的停顿,如果基于以上的配置,可以基本避免,至少不会再出现长时间fullgc

---------------------------------------------------------------------------------------------------------------------------

在gc.log中查看promotion failed和concurrent mode failure关键字来判断调优的基本面,在进行更细致的优化来改变gc的频繁程度等

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP