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

这个问题 搜一下解决方法还是挺多的,但是我看了下 大多都是分开讲的,我这里稍微总结下,参考在最后。

原因

根本原因是不能创建更多的线程了
具体原因分两种

1、 非root用户下 系统对最大线程数的限制,切换root用户 查看是否还有问题

2、根据公式:

(MaxProcessMemory - JVMMemory – ReservedOsMemory) / (ThreadStackSize) = Number of threads

得到的线程上限不够啦。

MaxProcessMemory: 一个进程的最大内存
JVMMemory : JVM内存
ReservedOsMemory: 保留的操作系统内存
ThreadStackSize : 线程栈的大小 -Xss指定大小

解决

对应原因
1、/etc/profile limit -u 调大 (还有其他几个地方可能会有限制 自行查看吧)
/proc/sys/kernel/pid_max,
/proc/sys/kernel/thread-max,
/proc/sys/vm/max_map_count。
2、

  • 减小jvm内存
  • -Xss设置 调小 ThreadStackSize
  • 使用64位操作系统
  • 检查程序自身是否有创建大量线程的地方

建议有需要的仔细看下下面的参考文章 说的都很详细

参考:
http://blog.csdn.net/kylinsoong/article/details/16879653
http://blog.csdn.net/yangbutao/article/details/8348926
http://blog.csdn.net/yaowj2/article/details/50235491
http://sesame.iteye.com/blog/622670

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值