1. 程式人生 > >問題:java.lang.OutOfMemoryError: unable to create new native thread

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

這個問題 搜一下解決方法還是挺多的,但是我看了下 大多都是分開講的,我這裡稍微總結下,參考在最後。

原因

根本原因是不能建立更多的執行緒了
具體原因分兩種

1、 非root使用者下 系統對最大執行緒數的限制,切換root使用者 檢視是否還有問題

2、根據公式:

(MaxProcessMemory - JVMMemory – ReservedOsMemory) / (ThreadStackSize) = Number of threads

得到的執行緒上限不夠啦。

MaxProcessMemory: 一個程序的最大記憶體
JVMMemory : JVM記憶體
ReservedOsMemory: 保留的作業系統記憶體
ThreadStackSize : 執行緒棧的大小 -Xss指定大小

解決

對應原因
1、/etc/profile limit -u 調大 (還有其他幾個地方可能會有限制 自行檢視吧)
/proc/sys/kernel/pid_max,
/proc/sys/kernel/thread-max,
/proc/sys/vm/max_map_count。
2、

  • 減小jvm記憶體
  • -Xss設定 調小 ThreadStackSize
  • 使用64位作業系統
  • 檢查程式自身是否有建立大量執行緒的地方

建議有需要的仔細看下下面的參考文章 說的都很詳細