HBase unable to create new native thread 错误解决方法

好多次向Hbase插入数据的时候(三台节点,一次性插入百万条数据),时不时的会发生:

java.lang.OutOfMemoryError: unable to create new native thread

内存不够了?但是我一看不对啊,内存够啊。那到底是什么原因呢?
后来查了一下是因为线程开启过多,超过限制了,至于受哪些限制大家可以参考下面一篇文章,写的非常好:

http://jzhihui.iteye.com/blog/1271122
从文中我们知道,响线程数量的因素有下面几个:
1.-Xms : intial java heap size
2 -Xmx : maximum java heap size
3 -Xss : the stack size for each thread
4 系统限制 : 系统最大可开线程数

但是具体是哪个原因的?搞了半天没搞好,后来通过查询HBase参考手册找到了答案:

http://hbase.apache.org/book.html

文档比较长,进去后搜索关键字:“nproc” 第一个就是,大概意思是,在一定的负载环境下,太低的 最大线程数会导致outOfMemoryError。

好了,接下来我们对用户分配的最大线程进行修改,首先我们先用ulimit -a 指令来查看以下默认系统限制(centOS6.6):
ulimit
看倒数第三行:max user processes : 1024
说明用户默认情况下只能启动1024个线程,这就是导致Hbase插入数据OutOfMemoryError的原因。

接下来我们修改下配置文件:
/etc/security/limits.d/90-nproc.conf
照猫画虎,为运行Hbase的用户分配更多的线程,如下所示:

hadoop     soft    nproc     10240 

登出用户再重新登陆,就可以生效了,再次运行HBase任务,搞定!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值