JVM垃圾收集调优案例-xwiki吞吐量调优
博客专区 > 囚兔 的博客 > 博客详情
JVM垃圾收集调优案例-xwiki吞吐量调优
囚兔 发表于2年前
JVM垃圾收集调优案例-xwiki吞吐量调优
  • 发表于 2年前
  • 阅读 173
  • 收藏 6
  • 点赞 1
  • 评论 1

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 作为JVM垃圾收集技术分享的案例,选择xwiki作为调优对象。

简介

通过压力测试查看xwiki的gc情况,统计分析gc日志,在不改变总内存使用的情况下做出合理调整,通过压力测试聚合报告对比调优效果。

步骤

  1. 运行程序,增加打印GC日志的参数;
  2. 使用badboy + jmeter对web程序的单个页面(首页)进行压力测试,压力测试参数为10线程,每线程执行100次测试;
  3. 使用jstatd + jvisualVM实时查看或gcviewer分析GC日志;
  4. 根据分析结果,调整JVM参数;
  5. 分析结果达到预期,结束,否则继续执行1~4。

工具

  • Badboy - 录制jmeter脚本
  • Jmeter - 压力测试
  • Jstatd - 提供远程使用jvisualVM实时看gc情况服务
  • jvisualVM - 查看gc情况
  • Gcviewer - 分析GC日志

测试环境

虚拟机 CPU 8核,内存 8G 操作系统 CentOS6.5 JDK: 1.7

第一轮:使用默认参数

运行web

JVM参数

-Xmx512m -XX:MaxPermSize=196m -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$LOGSDIR/xwiki.gc -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOGSDIR}

总内存:512 + 196 = 708M

结果

jstatd + jvisualVM实时:

输入图片说明

GCViwer:

输入图片说明

输入图片说明

输入图片说明

聚合报告

输入图片说明

统计分析GC日志: awk '{print $5,$6}' target.0 | awk -F'(' '{print $1,$2}' | awk '{print $1,$3}' | awk -F'->' '{print $1,$2,$3}' | awk -F'K' '{print $1,$2,$3,$4}' | awk '{print ($3-$4)/$1}' | awk '{sum+=$1} END{print sum/NR}' 平均年轻代的回收率为72%, 最差的回收率也基本大于65% 平均每次young GC 堆回收的内存空间为95M, 溢出到老年代的空间为16M 分析full gc每次的存活对象空间大概在170M左右

第二轮 - 调整jvm参数减少Full GC

调整

设置老年代大小为170M × 1.5 = 255M 新生代设置为170M × 2 = 340M

根据回收率计算Eden和Survivor的比例 设eden空间大小为E 设survivor大小为S 则有: E+2*S=340; S/S+E=0.35; -- 假设年轻代回收率为65% 计算得,E:S=1.8:1 则取值2:1

eden:survivor = 2:1

堆空间255+340=595M 永久代 708 - 595 = 113M

JVM参数

-Xmx595M -Xms595M -XX:NewSize=340M -XX:MaxNewSize=340M -XX:SurvivorRatio=2 -XX:PermSize=113M -XX:MaxPermSize=113M -XX:-UseAdaptiveSizePolicy -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$LOGSDIR/xwiki.gc -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=1 -XX:GCLogFileSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOGSDIR}

结果

jvisualVM:

输入图片说明 gcviewer:

输入图片说明

输入图片说明

输入图片说明

聚合报告

输入图片说明

再次对比测试

10线程,每线程1000次

聚合报告对比

  • 调优前

输入图片说明

  • 调优后

输入图片说明

标签: JVM GC java调优
共有 人打赏支持
囚兔
粉丝 35
博文 66
码字总数 31745
评论 (1)
hishyyao
迷路了
×
囚兔
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: