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

解決OutOfMemoryError: unable to create new native thread問題

java.lang.OutOfMemoryError共有8種類型,其中java.lang.OutOfMemoryError: unable to create new native thread是很常見的一種,這類錯誤通常發生在應用試圖建立新執行緒時。

可能原因

1. 系統記憶體耗盡,無法為新執行緒分配記憶體
2. 建立執行緒數超過了作業系統的限制


解決方案

1. 排查應用是否建立了過多的執行緒

通過jstack確定應用建立了多少執行緒?超量建立的執行緒的堆疊資訊是怎樣的?誰建立了這些執行緒?一旦明確了這些問題,便很容易解決。



2. 調整作業系統執行緒數閾值
作業系統會限制程序允許建立的執行緒數,使用ulimit -u命令檢視限制。某些伺服器上此閾值設定的過小,比如1024。一旦應用建立超過1024個執行緒,就會遇到java.lang.OutOfMemoryError: unable to create new native thread問題。如果是這種情況,可以調大作業系統執行緒數閾值。


3. 增加機器記憶體
如果上述兩項未能排除問題,可能是正常增長的業務確實需要更多記憶體來建立更多執行緒。如果是這種情況,增加機器記憶體。


4. 減小堆記憶體
一個老司機也經常忽略的非常重要的知識點:執行緒不在堆記憶體上建立,執行緒在堆記憶體之外的記憶體上建立。所以如果分配了堆記憶體之後只剩下很少的可用記憶體,依然可能遇到java.lang.OutOfMemoryError: unable to create new native thread。考慮如下場景:系統總記憶體6G,堆記憶體分配了5G,永久代512M。在這種情況下,JVM佔用了5.5G記憶體,系統程序、其他使用者程序和執行緒將共用剩下的0.5G記憶體,很有可能沒有足夠的可用記憶體建立新的執行緒。如果是這種情況,考慮減小堆記憶體。


5. 減少程序數
這和減小堆記憶體原理相似。考慮如下場景:系統總記憶體32G,java程序數5個,每個程序的堆記憶體6G。在這種情況下,java程序總共佔用30G記憶體,僅剩下2G記憶體用於系統程序、其他使用者程序和執行緒,很有可能沒有足夠的可用記憶體建立新的執行緒。如果是這種情況,考慮減少每臺機器上的程序數。


6. 減小執行緒棧大小

執行緒會佔用記憶體,如果每個執行緒都佔用更多記憶體,整體上將消耗更多的記憶體。每個執行緒預設佔用記憶體大小取決於JVM實現。可以利用-Xss引數限制執行緒記憶體大小,降低總記憶體消耗。例如,JVM預設每個執行緒佔用1M記憶體,應用有500個執行緒,那麼將消耗500M記憶體空間。如果實際上256K記憶體足夠執行緒正常執行,配置-Xss256k,那麼500個執行緒將只需要消耗125M記憶體。(注意,如果-Xss設定的過低,將會產生java.lang.StackOverflowError錯誤)

參考

https://blog.fastthread.io/2016/07/06/troubleshoot-outofmemoryerror-unable-to-create-new-native-thread/

相關推薦

解決OutOfMemoryError: unable to create new native thread問題

java.lang.OutOfMemoryError共有8種類型,其中java.lang.OutOfMemoryError: unable to create new native thread是很常見的一種,這類錯誤通常發生在應用試圖建立新執行緒時。 可能原因 1. 系

經常遇到的java.lang.OutOfMemoryError: unable to create new native thread解決方法

簡單分享一下,類似問題的解決方法 剛才在某機器上上xxx使用者下壓測時遇到這個問題,連xxx都進不去了 說明xxx使用者下無法建立跟多的執行緒了(當然root使用者沒這個問題) 系統能夠建立的最大執

java.lang.OutOfMemoryError: unable to create new native thread解決方法

我們使用Mysql,偶爾會出現OutOfMemoryError,這時候jvm堆中還有很多記憶體,下面是出錯的堆疊資訊: java.lang.OutOfMemoryError: unable to create newnative thread     at java.lan

訪問HBase遇到java.lang.OutOfMemoryError: unable to create new native thread解決方法

在HBase使用的過程中,通過java程式查詢HBase資料時,在某機器上hbase使用者下壓測時遇到這個問題,導致程式異常掛掉。在網上google了一下,發現原因是: 當前使用者下無法建立更多的執行緒(當然root使用者沒這個問題) HBase 的doc

關於“java.lang.OutOfMemoryError : unable to create new native Thread”的報錯問題

ulimit命令 既然 tps spa 好的 tiger src targe new 轉自:https://www.cnblogs.com/flying-tiger/p/5956926.html java.lang.OutOfMemoryError : unable t

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

1,使用 ulimit -a或者ulimit -u查詢當前機器設定的執行緒數 :4096 2,用jstack pid>xxx.txt 3,然後檢視 -Xss的大小,這個一般是制約因素

hbase-建立連線報錯 java.lang.OutOfMemoryError: unable to create new native thread

最近在本地電腦上連線hbase 出現錯誤 找到一篇不錯的部落格,在此記錄一下,希望能給遇到類似問題的同學提供參考 報錯資訊: java.util.concurrent.ExecutionException: java.lang.RuntimeExcept

由dubbo引起的 java OutOfMemoryError unable to create new native thread

先說明結果: 由於linux預設限制1024個執行緒,執行7個tomcat,一個大概150個執行緒左右,外加其中有兩個dubbo佔用了200*2個執行緒,超過1024限制時會出此錯。 解決方法:

JVM 系列二:java.lang.OutOfMemoryError: unable to create new native thread

問題描述 Java程式執行過程中丟擲java.lang.OutOfMemoryError: unable to create new native thread,如下所示: java.lang.OutOfMemoryError: unable to create new

Centos中普通使用者啟動多個Dubbo服務出現java.lang.OutOfMemoryError: unable to create new native thread

當在同一臺Centos伺服器上用普通使用者啟動多個dubbo服務時出現呼叫異常,檢視日誌發現是以下錯誤: 2016-07-06 16:23:48.806 [New I/O server boss #1 ([id: 0x55fcd7d6, /0:0:0:0:0:0:0:0:2

問題:java.lang.OutOfMemoryErrorunable to create new native thread

這個問題 搜一下解決方法還是挺多的,但是我看了下 大多都是分開講的,我這裡稍微總結下,參考在最後。 原因 根本原因是不能建立更多的執行緒了 具體原因分兩種 1、 非root使用者下 系統對最大執行緒數的限制,切換root使用者 檢視是否還有問題 2

關於服務程序申請執行緒數量的限制unable to create new native thread

在跑某個web服務的時候出現了以下異常 unable to create new native thread 執行此服務的使用者能申請的最大的執行緒數量是1024 修改配置檔案 vi /etc/security/limits.d/90-nproc.conf

ArcCatalog連接ArcSDE連接報:unable to create new database connection file,permission is denied

sde rcc href connect database 連接 art .com new 參考博文:鏈接 另外,若機器ip變更,sde是否受影響的問題 ArcCatalog連接ArcSDE連接報:unable to create new database conne

unable to create new roles

Hello Amit, Well to be accurate, in order to access Decision Center a user MUST belong to one of the following GROUPS: rtsAdministrator,

解決python Unable to create process usi兩版本共存的情況下

網上很多不適用於我自己的情況報錯說無法的類似無法啟動c:python36下的python.exe並且找不到pip3.exe可我為了讓python2.7和python3.6共存已經修改過該資料夾下的pyt

pip安裝出現Fatal error in launcher: Unable to create process using '"'的解決辦法

python2 情況 是否 bubuko inf img where class 控制 python中使用pip安裝模塊時,出現:Fatal error in launcher: Unable to create process using ‘"‘ 原因:系統中可能有多處安

解決Fatal error in launcher: Unable to create process using '"'

最新版 create mage 技術分享 創建 unable python .com eat 問題 分析原因 網上看了很多方案都說直接運行 python3 -m pip install --upgrade pip 來升級pip版本就好了,這個在大多數情況下都是有用的。因為

ORA-09925 Unable to create audit trail file 問題解決

問題描述: Oracle資料庫啟動例項時出現ora-09925、ora-01075的錯誤 問題分析: 檢視日誌/u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log,如下: 導致這個錯誤的原因要麼是dump目

ios編譯ffmpeg出現xcrun -sdk iphoneos clang is unable to create an executable file的解決方法

使用https://github.com/kewlbear/FFmpeg-iOS-build-script的指令碼一鍵編譯ffmpeg。 出現 building arm64... xcrun -sdk iphoneos clang is unable to create an executa

解決 Unable to create an instance of type [com.sun.faces.config.ConfigureListener]

宣告:每個人的的電腦都會因為電腦環境,版本等因素不同,可能解決方法不通用,請大家多點耐心吧,畢竟是幹這行的,開始學習的時候,我搭建SSM框架很多次,有問題無法解決就重頭搭建,bug是有的,但總有一天能克服。   我遇到的問題 Caused by: org.apache.cata