3

我正在使用 Hbase 和 Hbase Thrift Server 运行 Cloudera CDH4。一天几次,Thrift 服务器崩溃。

在 /var/log/hbase/hbase-hbase-thrift-myserver.out 中,有这样的:

#
# java.lang.OutOfMemoryError: Java heap space
# -XX:OnOutOfMemoryError="kill -9 %p"
#   Executing /bin/sh -c "kill -9 8151"...

在 /var/log/hbase/hbase-hbase-thrift-myserver.log 中,文件末尾没有错误消息。只有很多调试消息表明其中一个节点正在缓存特定文件。

我无法弄清楚 Hbase Thrift Server 的任何配置选项。/etc/ 中没有明显的文件。只是 /etc/hbase/conf 和它的 Hbase 文件。

关于调试的任何想法?

4

3 回答 3

2

我们在 HBase Thrift 设置中遇到了同样的问题,最后使用了一个看门狗脚本,如果 Thrift 没有运行,它会重新启动它。

您是否每天多次使用 HBase 服务器?这可能会导致这种情况。没有办法解决这个问题,Thrift 似乎每次使用时都会占用(或泄漏)大量内存,因此您需要一个看门狗脚本。

如果看门狗脚本过于繁重,您可以使用简单的 cron 作业在频繁的时间间隔内重新启动 Thrift,以确保它保持正常运行。

以下 cron 每两个小时重新启动一次 Thrift。

0 */2 * * * hbase-daemon.sh restart thrift
于 2013-02-05T22:21:25.167 回答
2

使用 /etc/hbase/conf/hbase-env.sh,我增加了堆大小,这解决了崩溃问题。

# The maximum amount of heap to use, in MB. Default is 1000.
export HBASE_HEAPSIZE=8000

感谢CDH 用户邮件列表上的 Harsh J帮助我弄清楚。正如他所指出的,我缺少日志消息表明kill -9可能正在发生:

实际上,如果日志尾部崩溃前缺少关闭处理程序消息,则可能是通过 OOM 处理程序将 kill -9 传递给进程。

于 2013-02-13T02:02:26.673 回答
2

增加堆大小可能并不总是解决方案。

根据这个cloudera 博客

Thrift 服务器可能正在接收无效数据。我建议启用帧传输和紧凑协议。

如果您在服务器上启用这些协议,则有一个问题,客户端应该使用相同的协议。

于 2016-06-08T22:18:35.487 回答