怎么用阿尔萨斯来诊断HBase异常进程

  介绍

这篇文章给大家分享的是有关怎么用阿尔萨斯来诊断HBase异常进程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1。异常突起

HBase集群的某一个RegionServer的CPU使用率突然飙升到百分之百,单独重启该RegionServer之后,CPU的负载依旧会逐渐攀上顶峰。多次重启集群之后,CPU满载的现象依然会复现,且会持续居高不下,慢慢地该RegionServer就会宕掉,慢慢地HBase集群就完犊子了。

2。异常之上的现象

鼎晖监控页面来看,除CPU之外的几乎所有核心指标都是正常的,磁盘和网络IO都很低,内存更是充足,压缩队列,刷新队列也是正常的。

怎么用阿尔萨斯来诊断HBase异常进程

普罗米修斯的监控也是类似这样的,就不贴图了。

监控指标里的数字,只能直观地告诉我们现象,不能告诉我们异常的起因,因此我们的第二反应是看日志。

与此同时,日志中还有很多类似这样的干扰输出。

怎么用阿尔萨斯来诊断HBase异常进程

后来发现这样的输出只是一些无关紧要的信息,对分析问题没有任何帮助,甚至会干扰我们对问题的定位。

但是,日志中大量扫描responseTooSlow的警告信息,似乎在告诉我们,HBase的服务器内部正在发生着大量耗时的扫描操作,这也许就是CPU负载高的元凶。可是,由于各种因素的作用,我们当时的关注点并没有在这个上面,因为这样的信息,我们在历史的时间段里也频繁撞见。

3。初识阿尔萨斯

监控和日志都不能让我们百分百确定CPU负载高是由哪些操作引起的,我们用高级命令也只能看到HBase这个进程消耗了很多CPU,就像下图看到的这样。

怎么用阿尔萨斯来诊断HBase异常进程

命令高层定位到的异常的HBase进程ID是1214年,该进程就是HRegionServer的进程。输入序1号,回车,就进入了监听该进程的命令行界面。

4.3仪表板

怎么用阿尔萨斯来诊断HBase异常进程

输入线程命令回车,查看该进程下所有线程的执行情况。

4.5线- n 3

怎么用阿尔萨斯来诊断HBase异常进程

单位时间为5秒内,资源占用前三名的线程。

4.7使用async-profiler生成火焰图

生成火焰图的最简单命令。

 profiler 开始

隔一段时间,大概三十秒。

 profiler 停止

怎么用阿尔萨斯来诊断HBase异常进程

关于火焰图的入门级知识:

查看jvm进程CPU火焰图工具。

火焰图里很清楚地定位到CPU时间占用最高的线程是绿框最长的那些线程,也就是扫描操作。

5。扫描操作引起的CPU负载过高

通过以上的进程分析,我们最终可以确定,扫描操作的发生,导致CPU负载很高。我们查询HBase的API基于happybase封装而成。

其实常规的扫描操作是能正常返回结果的,发生异常查询的表也不是很大,所以我们排除了热点的可能。抽象出来业务方的查询逻辑是:

<>之前得到happybase.connection  import  Connectionimport 时间   时间=start  time.time ()   时间=con 连接(主机=& # 39;ip # 39;,,=9090港,超时=3000)   时间=table  con.table (“table_name")   试一试:   ,,,res =,列表(table.scan(过滤器=癙refixFilter (& # 39; 273810955 | & # 39;)“,,,,,,,,,,,,,,,,,,,,,,, row_start=& # 39; \ x0f \ x10& R \ xca \ xdf \ x96 \ xcb \ xe2 \ \ xad9khE \ x19美元xad7 \ xfd \ xaa \ x87 \ xa5 \ xdd \ xf7 \ x85 \ x1c \ x81ku  ^ \ x92k& # 39;,,,,,,,,,,,,,,,,,,,,,,,限制=3))   except  Exception  as  e:   ,才能通过   最终获得=,time.time () print  & # 39;超时:,% d # 39;, %,(最终获得成功,开始)

PrefixFilter和row_start的组合是为了实现分页查询的需求,row_start的一堆乱码字符,是加密的一个user_id,里面有特殊字符。日志中看到,所有的耗时查询,都有此类乱码字符的传参于。是,我们猜想,查询出现的异常与这些乱码字符有关。

但是,后续测试复现的时候又发现。

怎么用阿尔萨斯来诊断HBase异常进程