专栏首页大数据成神之路HBase调优|HBase + G1GC 性能调优

HBase调优|HBase + G1GC 性能调优

目前小米已经在线上开始大规模使用G1垃圾回收算法,在论坛中也看到一些朋友在讨论使用G1碰到的各种各样的问题,这里打算写一篇文章记录下调G1的一些经验。 先传送门一下,之前在HBaseConAsia2017分享过一个G1GC调优的PPT:

http://openinx.github.io/2012/01/01/my-share/ 首先,对G1算法不熟悉的同学,可以仔细读一读Oracle的G1算法教程,教程基本交代了G1的运行原理以及和CMS本质区别,如果对算法细节感兴趣,可以读一下Garbage-First Garbage Collection这篇论文,JVM的G1实现应该是按照这篇论文来的.

为了便于统计G1GC的日志信息,我们需要开启以下所有的G1参数:

-Xmx30g -Xms30g
-XX:MaxDirectMemorySize=30g
-XX:+UseG1GC
-XX:+UnlockExperimentalVMOptions
-XX:MaxGCPauseMillis=90
-XX:G1NewSizePercent=8
-XX:InitiatingHeapOccupancyPercent=30
-XX:+ParallelRefProcEnabled
-XX:ConcGCThreads=4
-XX:ParallelGCThreads=16
-XX:MaxTenuringThreshold=1
-XX:G1HeapRegionSize=32m
-XX:G1MixedGCCountTarget=64
-XX:G1OldCSetRegionThresholdPercent=5

其中重点需要调优的参数主要有: 1. G1NewSizePercent :G1的Young区大小是通过算法来自适应确定的, 也就是根据之前Young区GC的耗时来确定之后的Young大小,如果耗时过长,则调小Young区,耗时过短,则调大Young区. 这个参数表示Young的最小百分比. 2. InitiatingHeapOccupancyPercent: 当占用内存超过这个百分比的时候, G1开始执行多次Mixed GC来整理老年代内存碎片. 3. G1MixedGCCountTarget: 当占用内存超过InitiatingHeapOccupancyPercent阀值时, 最多通过多少次Mixed GC来将内存控制在阀值之下. 4. MaxTenuringThreshold: 当一个对象gc的代数超过这个值的时候, 会将对象从young区挪到old区. 5. G1HeapRegionSize: 表示G1将每个Region切分成多大, 注意一定要写单位, 例如32m. 由于每个参数的取值范围非常广, 例如G1NewSizePercent一般可以从0到10不等(甚至可以取更大), 而且参数众多. 于是, 我们写一个脚本用来修改每一个参数,然后自动重启, 并记录每个参数的测试开始时间点和结束时间点. 后面只需要通过工具自动分析gc日志即可. 这里, 脚本每次只会调整一个参数, 然后重启整个集群, 然后通过PerformanceEvaluation工具进行压力测试, 压力测试会跑一个小时,跑完之后调整下一个参数, 后续接着跑. 脚本地址在这里:

https://github.com/openinx/scripts/blob/master/java-g1gc-tuning.py 跑完所有的参数之后, 后续就需要通过工具来分析G1的日志了, 之前HubSpot开发了一个Python工具, 叫做gc_log_visualizer , 这个工具通过正则提取日志数据, 然后绘制成监控图, 比较方便查看G1的全局状态。

欢迎点赞+收藏+转发朋友圈素质三连

本文分享自微信公众号 - 大数据技术与架构(import_bigdata)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 美化 | Conky美化工具的配置

    Conky是Linux下的一款桌面美化工具,据说官方已经不再维护更新,但因其高度自定义而受到不少人的青睐,同时又因为其高度自定义使人望而却步,不说这么多的废话了...

    TeamsSix
  • 强迫症如何干净删除 commit 记录

    我相信这不是我一个人的经历:傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去...

    小闫同学啊
  • 【有趣】这段java太古怪

    非常负责任的告诉你,是的!不信请看下图。纯纯正正的java代码,class为XJJ的java源码,执行后打印小姐姐我爱你。

    xjjdog
  • Git推送大文件失败?你晓得如何解决嘛?

    我相信这不是我一个人的经历:傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去...

    小闫同学啊
  • git add也能出错?

    小闫同学啊
  • 一沟绝望的死水:模拟邮件服务器,批量注册利器

    我们的目标就是把这互联网搞的更乱更臭,所以我们是不被规则束缚的。今天要拿来开刀的,是邮件系统。

    xjjdog
  • 用欧拉计划学习Rust编程(第32~34题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识。学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快...

    申龙斌
  • 硬核教程:五步掌握用VSCode进行高效Python开发

    在程序员圈子里,Visual Studio Code(以下简称VSCode)可以说是目前最火的代码编辑器之一了。

    量子位
  • 手撸一套纯粹的CQRS实现

    关于CQRS,在实现上有很多差异,这是因为CQRS本身很简单,但是它犹如潘多拉魔盒的钥匙,有了它,读写分离、事件溯源、消息传递、最终一致性等都被引入了框架,从而...

    thz
  • 命令行忘性大?这个开源备忘工具一次解决你的所有烦恼

    命令行是非常高效的工具,但一个很常见的现象是,很多命令行过一段时间就容易忘。举个栗子,如果我们常用 git 命令行管理代码、利用 conda 命令管理开发环境,...

    机器之心

扫码关注云+社区

领取腾讯云代金券