java.lang.OutOfMemoryError: unable to create new native thread 问题原因及解决

1. 问题描述

我们知道,java进程中的线程,是直接映射到服务的线程上,当创建的线程过多时,创建线程会失败,现象如下:

689
690
691
692
693
Exception in thread "main" 694
java.lang.OutOfMemoryError: unable to create new native thread
        at java.lang.Thread.start0(Native Method)
        at java.lang.Thread.start(Thread.java:714)
        at com.jfp.test.CPUTest2.main(CPUTest2.java:20)

2. 问题原因

服务器对每个进程有内存大小限制(服务器进程内存包含JVM内存和服务器线程内存),当进程内存限制过小,JVM内存过大时,就没有内存空间继续分配新的线程,就会产生OOM: unable to create new native thread

注意: 这部分内存溢出不发生在JVM中,而是发生在服务器内存中

3. 解决办法

调整服务器进程最大内存限制(默认是32768即32G)

echo 102400 > /proc/sys/kernel/pid_max

4. 参考

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

你可能感兴趣的:(java.lang.OutOfMemoryError: unable to create new native thread 问题原因及解决)