高并发请求服务器时,经常出现如下异常: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默认限制
    代码示例:
    1. public class UnableToCreateNewNativeThreadDemo {
    2. public static void main(String[] args) {
    3. for (int i = 0; ; i++) {
    4. System.out.println("*********************i=" + i);
    5. new Thread(() -> {
    6. try {
    7. Thread.sleep(Integer.MAX_VALUE);
    8. } catch (InterruptedException e) {
    9. e.printStackTrace();
    10. }
    11. }, "" + i).start();
    12. }
    13. }
    14. }

    Java虚拟机OOM之unable to create new native thread - 图1