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

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

在这里插入图片描述

2、java.io.IOException: Cannot run program “/bin/sh”: error=12, Cannot allocate memory

在这里插入图片描述

场景

测试机项目早上突然500,不能正常访问

异常分析

这个异常问题本质原因是我们创建了太多的线程,而能创建的线程数是有限制的,导致了异常的发生。能创建的线程数的具体计算公式如下:
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads

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

异常分析

上述都是在考虑线程的问题,线程又受到服务器进程的限制,难道是服务器上的进程数超最大限制了?

1.查看最大进程数 sysctl kernel.pid_max
2.查看当前进程数 ps -eLf | wc -l

在这里插入图片描述

打命令就界面提示 -bash: fork: Cannot allocate memory 一直提示:无法分配内存
最后排查到问题点了 就是进程连接满了 无法连接上新进程了
如果都连不上 那就没办法了,只能重启测试机了

解决方案

系统默认的pid_max 值为32768

1.临时修改最大进程数 [重启后就失效]
echo 1000000 > /proc/sys/kernel/pid_max
2.永久生效
echo "kernel.pid_max=1000000 " >> /etc/sysctl.conf
sysctl -p
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值