文档章节

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

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

简介

通过压力测试查看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
博文 86
码字总数 47164
作品 1
南京
程序员
私信 提问
加载中

评论(1)

hishyyao
hishyyao
迷路了
快速安装xwiki

用了MoinMoin,但是配置的不太好,换成XWiki,觉得还是比较靠谱,可能是自己搞java的原因吧,觉得亲切些,安装配置过程和简单使用遇到的问题如下 1. 从http://www.xwiki.org下载1.7.2版的zip...

红薯
2009/04/06
7.2K
5
XWiki 9.10.1 发布,Java 编写的开源 wiki 和应用平台

XWiki 9.10.1 发布了。XWiki 是一个用 Java 编写的开源 wiki 和应用平台。 主要更新内容如下: XWIKI-14874 Broken deleted attachment break the whole deleted attachments index XWIKI-14......

达尔文
2017/12/01
378
0
XWiki Enterprise 6.2.6 发布,Java 的 Wiki 系统

XWiki 6.2.6 发布,XWiki是一个由Java编写的基于LGPL协议发布的开源wiki和应用平台。它的开发平台特性允许创建协作式Web应用,同时也提供了构建于平台之上的打包应用(第二代wiki)。 这是一...

oschina
2015/02/24
812
1
XWiki 8.1 发布了,Java 的 Wiki 系统

XWiki 8.1 成功发布。该版本升级到了Java 8,一个新的提示面板取代了旧的快速链接面板,改进了扩展管理器,LDAP同步了头像。像往常一样,也包括很多bug修复和小的改进内容。 XWiki是一个由J...

oschina
2016/05/25
1K
2
Java Wiki 系统 XWiki 2.0正式版发布

Java Wiki 系统 XWiki 2.0正式版发布,该正式版没有任何变化。 正式版下载地址:http://forge.ow2.org/projects/xwiki XWiki是一个由Java编写的基于LGPL协议发布的开源wiki和应用平台。它的开...

老枪
2009/10/04
377
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsearch

随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构的兴起,看似一个简单的应用,后台可能很多服务在支撑;一个请求可能需要多个服务的调用;当请求迟缓或不可用时,无法得知...

编程SHA
11分钟前
1
0
Swift-清除缓存

func removeCache (){ // 取出cache文件夹路径.如果清除其他位子的可以将cachesDirectory换成对应的文件夹 let cachePath = NSSearchPathForDirectoriesInDomains(FileMan...

west_zll
11分钟前
1
0
kl键盘事件

frameworks/base/data/keyboards路径下定义了很对kl文件。如Vendor_0416_Product_0300.kl,定义了某某遥控器的按键事件 # TVkey 103 DPAD_UPkey 108 DPAD_DOWNkey 105 DPAD_LEFTk...

安卓工程师王恒
14分钟前
1
0
CentOS 7 安装 Docker

工具: Oracle VM VirtualBox 虚拟机 ,本地电脑win10 系统: 虚拟机装 centos 7 前置条件: Docker 要求 CentOS 系统的内核版本高于 3.10 1. 通过 uname -r 命令查看当前的内核版本 2. 如果不够...

_大侠__
25分钟前
1
0
webrtc onAddStream回调流程

背景 webrtc代码基于M59 正文 1. 回调设置和处理 (1)java层先在监听器中实现回调处理函数,如下所示: private class PCObserver implements PeerConnection.Observer { @Override...

bill_shen
27分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部