文档章节

JVM垃圾收集调优案例-xwiki吞吐量调优

囚兔
 囚兔
发布于 2016/02/02 14:46
字数 617
阅读 209
收藏 6

简介

通过压力测试查看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次

聚合报告对比

  • 调优前

输入图片说明

  • 调优后

输入图片说明

© 著作权归作者所有

共有 人打赏支持
囚兔

囚兔

粉丝 38
博文 82
码字总数 46066
作品 1
南京
程序员
加载中

评论(1)

hishyyao
hishyyao
迷路了
xwiki 5.0 安装及使用

国内xwiki安装使用资料较少,有的也是些老版本。根据自己使用xwiki经验,总结出来,供参考 以里程碑2版为例。下载页面 http://enterprise.xwiki.org/xwiki/bin/view/Main/Download 初次windo...

王海龙
2013/05/20
0
0
如何合理的规划一次jvm性能调优

这是jvm优化系列第三篇: jvm优化——垃圾回收 jvm优化——监控工具 JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考虑各方面的影响。但也有一些基础的理论和原则,理解...

wier
2017/10/25
0
9
成为Java GC专家(5)—Java性能调优原则

这是“成为Java GC专家”系列的第五篇文章。在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同的GC算法流程、GC的工作原理、新生代(Young Generation)和老年代(Old Generation)的...

stefanzhlg
2014/12/05
0
1
大型互联网架构必备技术——性能调优专题

性能调优 深入内核,直击故障 ,拒绝蒙圈 性能优化如何理解 1、性能基准 2、什么是性能优化 3、衡量标准 JVM调优 1、Jvm虚拟机内存剖析 2、垃圾收集器 3、实战调优案例与解决方案 4、Jvm运行...

Java高级架构
04/15
0
0
JVM调优总结(5):典型配置

JVM调优总结(5):典型配置 2016-04-20(点击上方公众号,可快速关注) 来源:pengjiaheng网址:http://pengjiaheng.iteye.com/blog/538582 以下配置主要针对分代垃圾回收算法而言。 堆大小...

舒文joven
07/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
32分钟前
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
1
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
9
3
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0
OpenCV边缘检测算子原理总结及实现

1. 拉普拉斯算子 原理:是一种基于图像导数运算的高通线性滤波器。它通过二阶导数来度量图像函数的曲率。 拉普拉斯算子是最简单的各向同性微分算子,它具有旋转不变性。一个二维图像函数的拉...

漫步当下
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部