0%

记一次生产环境hbase的regionserver进程频繁消失的问题

背景

环境

HDP : 2.6.5.0-292

Hbase : 1.1.2

机器

linux 16Core 32G内存 5台

Hbase设置

最大内存 : 12.5G

内存大小

内存使用

问题

问题

由上图可以看出,每隔一段时间,一个Regionserver就会挂掉,并且过一会又会自动重启

分析

是否由于内存不足导致内存溢出?

由上面的那种内存使用图可以看出,MaxMemM 为12.5G,CommitMemM 为12.5G,而平均使用内存大概为 5G左右,发现内存使用情况还好,并没有频繁的GC,通过查看regionserver的日志目录,也没发现因为内存溢出而导致进程退出。

内存情况

是否由于Hbase本身的错误而导致进程退出?

也有可能因为hbase本身的程序错误而导致进程退出,但是通过查看regionserver.log,并没有发现异常问题,看到的只是几行关于zookeeper 和 metrics 停止的日志,如下, 输入 /unlimited 并键入 n 键翻页 搜索启动的日志,找到最后一次重启之前的那一段时间的日志,发现并没有ERROR报错,

1
less hbase-hbase-regionserver-xxx.log

image

是否是因为系统内存不足将hbase进程杀掉?

查看当前目录下的 regionserver.out 日志,果然发现了异常,显示 hbase被系统kill掉了

1
/usr/hdp/current/hbase-regionserver/bin/hbase-daemon.sh: line 214: 13386 Killed                  nice -n $HBASE_NICENESS "$HBASE_HOME"/bin/hbase --config "${HBASE_CONF_DIR}" $command "$@" start >> ${HBASE_LOGOUT} 2>&1

下面就需要找一找原因,为什么会被kill掉,键入命令,并且键入 SHIFT+G,看到,确实是有kill掉进程,pid也对的上

1
dmesg -T | less 
1
[Fri May  8 19:14:39 2020] Out of memory: Kill process 13551 (java) score 164 or sacrifice child

原因分析

因为这regionserver机器也有nodemanager进程和kylin服务,在任务构建的时候,yarn的内存需求量非常大,判断为系统在内存不够的时候,自动选取了内存消耗较大的进程kill掉,所以regionserver就无辜被杀死了。

解决方案

  1. 根据上图内存消耗情况,发现hbase其实内存需求量不多,所以调整hbase regionserver 最大内存为 8G
  2. 调小nodemanager内存
  3. 调小kylin的内存
  4. 迁移这个机器上非必须的服务到其他节点