概况:

生产环境HBase集群内存经常处于高位(90%),而且GC之后也是内存依然处于高位,经分析内存全部由集群的regionserver进程所持有,,经常重启之后,大概3-4天就会保持在高位。由上述症状,可以判断集群内存有泄露的嫌疑。

分析

1、先熟悉一下HBase的内存模型

HBase系统中有两块大的内存管理模块,一块是MemStore ,一块是BlockCache,前置是用于集群写入所属内存,而后者用于缓存热数据,提供查询速度。这两者均可以通过配置文件进行配置。当前集群均配置了0.4和0.4的比例。而考虑到HBase集群是多写少读的情景,为此而引入了MSLAB机制来优化HBase的MemStore 负担。内存的使用率会呈现很优美的锯齿图形。

2、分析内存使用率和业务关系

起初认为是读写业务量已经超过了集群负载能力,但集群业务也不大,写和读的TPS,带宽吞吐量均未达到集群限定的能力,而且CPU利用率大多半都被GC占用,但内存就是持高不下,即使业务了停了一天,内存还是不怎么下降,很明显和业务量无关。

那么和compaction有关?经观察的确可以看compact时特别消耗时间。此时感觉看到了希望,调整各个参数,把compact操作提升了10+倍之后,内存还是持高不下 。剩下最根治的办法就是分析内存,看一下内存数据都是什么?有无内存泄露问题。

3、分析dunp文件

节点dump下regionserver的内存,分析发现内存中有50个RpcServer.FifoRWQ.default.read.handler线程,每个线程持有了1.2%左右的总内存,那么所有的线程持有的内存占有量大于为50*1.2%=60%。随着查询次数增多,线程持续的内存还会持续增加,如下图。

分析每一个线程持有的内存数据,全部都是业务信息。

那么继续分析,此业务信息所属对象:org.locationtech.geomesa.filter.factory.FastFilterFactory。而对比同规模的集群,的确是此异常集群开启了GeoMesa特性。找到问题所在,那就看源码分析是唯一出路。

4、解决方案

经分析GeoMesa源码,缓存数据为GeoMesa的filterCache,全部都是查询的条件及其优化后查询条件。如下代码:

override def getOrElseUpdate(key: K, op: => V): V = {
   val cached = caches.get.getIfPresent(key)
   if (cached != null) { cached } else {
     val value = op

//value=optimize(sft, ECQL.toFilter(ecql))

caches.get.put(key, value)
     value
   }
 }

导致集群随着查询次数增多,内存一直持续不下。

能否去掉此处缓存策略呢?为什么缓存此查询信息呢,目的就是为了减少同样的查询再次被优化的步骤。那么我们查询添条件key有没有重复使用,此处有个严格规定,就是key中不仅保证使用相同的GeoMesa函数还有使用相同的参数,基于这个原则,业务上查询条件是没有重复的。

我们配置了可选参数useFilterCache

,默认是开启的,没必要缓存此查询条件,,应予以删除。

、结论

在配置文件中添加了useFilterCache参数,默认是开启的,根据业务需要选择开始和关闭filterCache特效。

经分析我们业务场景没必要缓存此查询条件,,应予以关闭。优化后的集群内存使用率情况就恢复了正常状态。

点击这里→了解更多精彩内容

内存总是不够?HBaseGeoMesa配置优化了解一下相关推荐

  1. 4G内存服务器的MySQL配置优化

    公司网站访问量越来越大(日均超10万PV),MySQL自然成为瓶颈,关于 MySQL 的优化,最基本的是 MySQL 系统参数的优化. MySQL对于web架构性能的影响最大,也是关键的核心部分.My ...

  2. tomcat 内存配置优化 Xms Xmx

    简介 考虑一下这种场景,你开发了一个应用,它有十分优秀的布局设计,最新的特性以及其它的优秀特点.但是在性能这方面欠缺,不管这个应用如何都会遭到客户拒绝.客户总是期望它们的应用应该有更好的性能.如果你在 ...

  3. MySQL 5.6 my.cnf配置优化

    MySQL 5.6 my.cnf配置优化 4核 16G Centos6.5 x64 优化后测试结果如下 #mysqlslap #--concurrency=2 #--iterations=1 #--n ...

  4. Redis在Linux系统的配置优化

    通常来看,Redis开发和运维人员更加关注的是Redis本身的一些配置优化,例如AOF和RDB的配置优化.数据结构的配置优化等,但是对于操作系统是否需要针对Redis做一些配置优化不甚了解或者不太关心 ...

  5. HBase性能优化方法总结(1):配置优化

    配置优化 zookeeper.session.timeout 默认值:3分钟(180000ms) 说明:RegionServer与Zookeeper间的连接超时时间.当超时时间到后,ReigonSer ...

  6. mysql 提高电脑配置_Mysql配置优化浅谈

    Mysql配置优化浅谈安装MySQL后,配置文件my.cnf在MySQL 安装目录/share/mysql目录中,该目录中还包含多个配置文件可供参考,有my-large.cnf ,my-huge.cn ...

  7. apache配置优化

    最近参加了很多面试,多多少少有点小感悟,可以说观念转变了不少,特别是对于作为一个开发人员的定位,原来只是认为开发人员就只需要写好代码就行了,所以只需要有数据结构,算法,设计模式,重构方面的知识就行了. ...

  8. Tomcat配置优化

    TOMCAT配置优化 一. Tomcat下使用Log4j 接管 catalina.out 日志文件生成方式, 按天存放,解决catalina.out日志文件过大问题 1.准备jar包: log4j-1 ...

  9. maya计算机内存不足请保存,Maya内存不足不能渲染怎么优化场景?

    Maya内存不足不能渲染怎么优化场景?可能由于Maya的场景文件过于复杂,或者材质质量过高的问题,用户最终渲染时会出现无法启用高质量的渲染工作的错误,这时候用户可以选择做一些合适的处理,以保证渲染工作 ...

最新文章

  1. jQuery 对象及伪数组
  2. BU_DATE_CHAR abap screen 日期字段搜索帮助
  3. hs300 quant
  4. 处理器在实施任务切换时的操作——《x86汇编语言:从实模式到保护模式》读书笔记39
  5. PHP网站使用JavaScript和Iframe简单实现部分刷新效果
  6. Python全栈开发之数据类型
  7. API和Web API(1)
  8. 点击微信网页的a标签直接跳转到淘宝APP打开怎么实现的?附:动图演示效果
  9. python-next
  10. 标准偏差:评价数据的离散程度
  11. (附源码)Python音乐分类系统 毕业设计 250858
  12. re.sub()用法的详细介绍
  13. OpenFOAM学习笔记 案例1之Cavity(1)
  14. 百分位(percentile)是什么概念?怎么理解第95个百分位(95th percentile)
  15. nextjs 基于 isomorphic-unfetch 封装自己的请求库
  16. iOS7到iOS8 一个通用的横竖屏幕切换总结
  17. 如何给135编辑器推文添加附件
  18. Tomcat源码解析:启动
  19. Beyond Compare 设置打开文件的默认编码
  20. 一文弄懂Python中的Lambda表达式

热门文章

  1. 修复IE下相对容器中绝对定位Bug
  2. es6 Iterator 接口与 Generator 函数
  3. android 代码中使用dp,简单谈谈Android中SP与DP的区别
  4. ci mysql 缓存_CodeIgniter框架中启用和清除缓存的教程
  5. verp之增加接近传感器(proximity sensor)
  6. 视觉SLAM笔记(5) 编程基础
  7. python制作软件界面_Python 脚本 GUI 界面生成工具
  8. css网页设计作业_小姐姐用 HTML + CSS 画油画?谁能想到前端还有这么一手操作!...
  9. 线段树区改区查标记永久化板子
  10. 【综合】JS跨域方案JSONP与CORS跨域