Java虛擬機OOM之unable to create new native thread

高併發請求服務器時,經常出現如下異常:java.lang.OutOfMemoryError:unable to create new native thread.

準確的講,該native thread錯誤與對應的平臺有關。

導致原因:

  1. 你的應用創建了太多的線程,一個應用進程創建多個線程,超過系統承載極限
  2. 你的服務器並不允許你的應用程序創建這麼多線程,linux系統默認允許單個進程可以創建的線程數是1024個。你的應用創建超過這個數據,就會報java.lang.OutOfMemoryError:unable to create new native thread.

解決辦法:

  1. 想辦法降低你應用程序創建線程的數量,分析應用是否真的需要創建這麼多線程,如果不是,改代碼將線程數降到最低。
  2. 對於有的應用,確實需要創建很多線程,遠超過linux系統默認的1024個線程的限制,可以通過修改linux服務器配置,擴大linux默認限制

 

代碼示例:

public class UnableToCreateNewNativeThreadDemo {

    public static void main(String[] args) {
        for (int i = 0; ; i++) {
            System.out.println("*********************i=" + i);
            new Thread(() -> {
                try {
                    Thread.sleep(Integer.MAX_VALUE);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }, "" + i).start();
        }
    }
}

運行結果:

 

參考《尚硅谷面試》

發佈了85 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章