不积跬步,无以至千里;不积小流,无以成江海。

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

Linux普通用户运行服务报错java.lang.OutOfMemoryError: unable to create new native thread

解释
这个错误在高并发请求服务器经常会出现,因为这个native thread 异常与对应的平台有关。

导致原因
你的应用创建太多线程了,一个应用进程创建多个线程,超过系统承载极限。
你的服务器并不允许你的应用程序创建这么多线程,linux系统默认允许单个进程可以创建的线程数是1024个,你的应用创建超过这个数量,就会报java.lang.OutOfMemoryError: unable to create new native thread异常。
解决办法
想办法降低你应用程序创建线程的数量,分析应用是否真的需要创建这么多线程,如果不是,改代码将线程数降到最低。
对应有的应用,确实需要创建很多线程,远超过linux系统默认1024个线程的限制,可以通过修改linux服务器配置扩大linux默认限制。

查看当前系统应用使用进程数

ps -eLf | wc -l
17035

查看用户最大线程数(切换普通用户查看)

ulimit -u
4096

可以看出默认的普通用户只有4096。不足以运行当前的这些应用。所以报不能创建新的线程。

线程数配置文件

vim /etc/security/limits.d/20-nproc.conf

# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     4096
root       soft    nproc     unlimited

修改最大线程数

vim /etc/security/limits.d/20-nproc.conf

# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     4096
root       soft    nproc     unlimited
普通用户名      soft    nproc     50000

修改完需要重启服务器,配置才能生效

重启

查看

ulimit -u
50000

完成

posted @ 2021-08-06 11:19  |是吴啊|  阅读(195)  评论(0编辑  收藏  举报