

HBase + G1GC 性能调优
source link: https://www.tuicool.com/articles/V7bqY3a
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

目前小米已经在线上开始大规模使用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的全局状态。
大家工作学习遇到HBase技术问题,把问题发布到HBase技术社区论坛 http://hbase.group ,欢迎大家论坛上面提问留言讨论。想了解更多HBase技术关注HBase技术社区公众号(微信号: hbasegroup ),非常欢迎大家积极投稿。
Recommend
-
71
性能调优步骤一般性能问题调优的步骤:步骤一:确定问题应用程序代码:在通常情况下,很多程序的性能问题都是写出来的,因此对于发现瓶颈的模块,应该首先检查一下代码。数据库配置:经常引起整个系统运行缓慢,一些诸如oracle的大型数据库都是需要DBA进行正确的参...
-
65
eBay的Elasticsearch性能调优实践
-
73
-
66
Life is magic. Coding is art.
-
29
点击关注“OPPO互联网技术”,阅读更多技术干货 本文不讨论 G1 底层数据结构与算法,从 G1 GC 行为上做简要介绍 G1 的过程 Garbage-First Garbage Collector 从官网的描述来看: G1 is a generational, incremental, parallel, mostly...
-
31
本文主要分析严选库存中心压测期间G1GC收集比较慢的问题。 背景 11月6日严选全链路压测期间,发现...
-
6
本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法。有关HBase系统配置级别的优化,这里涉及的不多,这部分可以参考:淘宝Ken Wu同学的博客。 1. 表的设计
-
7
1 HBase 表结构设计调优1.1 Row Key 设计HBase 中 row key 用来检索表中的记录,支持以下三种方式:通过单个 row key 访问:即按照某个 row key 键值进行 get 操作;通过 row key 的 range 进行 scan:即通过...
-
6
Slowness in Java Application Due To Increased FullGC Events: G1GC ...
-
2
HBase在淘宝主搜索的Dump中的性能调优 浏览:1734次 出处信息 目前HBase已经运用于淘宝主搜索...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK