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

这种情况是无法创建本地线程,一般是操作系统内存不够导致。

 

根据OOM异常信息:无法创建新的本地线程得知是本地线程无法满足现有应用的使用。线程的内存分配属于栈区,栈区的大小是动态变化的,是系统内存在分配完给jvm及自己系统保留运行内存后的剩余的可用大小

假设我们设置的–Xms -Xmx5G,保守估计系统保留500M运行内存,系统总的内存为8G

此时内存值剩余8-5.5=2.5G.所以目前只剩余2.5g内存供创建线程使用,根据-Xss默认为1M的线程栈大小得出可创建2500多个线程。(执行java -XX:+PrintFlagsFinal -version | grep ThreadStackSize   可以打印-Xss设定的值)

 

在生产上环境上执行命令

ps hH p <pid> | wc -l

查看了正常运行下的应用的进程的线程数为1000个。正常情况下线程数为平均值的75%。所以在偶发高峰期是很有可能达到极限的值。

 

解决方案:

1. 增加服务器内存

2. 减小-Xss的值

转载于:https://my.oschina.net/trydaydayup/blog/1805776

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值