访问HBase遇到java.lang.OutOfMemoryError: unable to create new native thread的解决方法

在HBase使用的过程中,通过java程序查询HBase数据时,在某机器上hbase用户下压测时遇到这个问题,导致程序异常挂掉。在网上google了一下,发现原因是:
当前用户下无法创建更多的线程(当然root用户没这个问题)
HBase 的doc中有相关描述:http://hbase.apache.org/0.94/book/trouble.rs.html
下面是解决方案:
系统能够创建的最大线程数:(MaxProcessMemory - JVMMemory – 系统内存) / (ThreadStackSize) = Number of threads
有两种方式:
1. 减少xxx下的ThreadStackSize
2. 增加xxx下的nproc数量
修改

[hbase@node1]$ ulimit -a
core filesize          (blocks, -c) 0
data segsize           (kbytes, -d)unlimited
schedulingpriority            (-e) 0
filesize              (blocks, -f) unlimited
pendingsignals                (-i) 256636
max lockedmemory       (kbytes, -l) 64
max memorysize         (kbytes, -m) unlimited
openfiles                     (-n) 65536
pipesize            (512bytes, -p) 8
POSIX messagequeues     (bytes, -q) 819200
real-timepriority             (-r) 0
stacksize             (kbytes, -s) 10240-----可以减小这个,建议在jvmxss中减少
cputime              (seconds, -t) unlimited
max userprocesses             (-u) 1024-----可以增加这个到65535
virtualmemory          (kbytes, -v)unlimited
filelocks                     (-x) unlimited

修改/etc/security/limits.conf

*    soft    nofile    65536
*    hard    nofile    65536
xxx soft nproc  65535
xxx hard nproc  65535
xxx soft stack  1024
xxx hard stack  1024

其中 xxx表示启动hbase的用户,如使用hadoop启动hbase,则配置如下:

* - nproc 102400
* - nofile 102400
hadoop           hard    nproc           65535
hadoop           soft    nproc           65535
hadoop           hard    stack           1024
hadoop           soft    stack           1024

本文参考文章http://beyond3518.blog.51cto.com/1360525/1764190,但是文章中说,改成32000就可以,在某些情况下可能不够(当前改成32000依旧出现上述问题)。所以需要适当调大(此处调大到65535就可以了。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值