用 Arthas 神器来诊断 HBase 异常进程

当HBase集群中RegionServer的CPU利用率异常升高时,通过Arthas工具进行分析,发现大量耗时的scan操作可能是罪魁祸首。Arthas的dashboard、thread等命令帮助定位到CPU占用高的线程,揭示scan操作频繁创建连接或使用线程池导致的问题。调整`hbase.regionserver.handler.count`等相关参数以控制scan请求的队列,实现资源隔离,解决CPU负载过高问题。
摘要由CSDN通过智能技术生成

1. 异常突起

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

2. 异常之上的现象

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

1.png

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

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

2.png
(企业微信截图)

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

3.png

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

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

3. 初识 arthas

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

4.png

如果不做进一步分析,你仍然不知道,问题出现在 HBase 相关进程下的哪些执行线程。Java 中分析进程的命令,可以使用 jstack 或 jstat gcutil 等。但是,今天要介绍的主角不是这俩,甚至不是 async-profiler,而是 arthasasync-profiler 虽然也是一个很强大的工具,但是 arthas 包含了它,且功能更强大,堪称神器。

arthas 很早以前就听说过,起初以为它只能用来分析 WEB 应用,例如 Spring Boot,这两天仔细翻看其官方文档之后,才觉得自己是多么的无知。arthas 的相关介绍和入门使用,请参考其文档,它的官方文档比任何第三方资料都详细和友好。

4. 用 arthas 来分析 HBase 的异常进程

4.1 运行 arthas

java -jar /data/arthas/arthas-boot.jar  --target-ip 0.0.0.0
  • --target-ip 默认 127.0.0.1,此处赋值为 0.0.0.0 是为了使用 webconsole

4.2 arthas 运行成功的界面

5.png

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

4.3 dashboard

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值