日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解决OutOfMemoryError: unable to create new native thread问题

發布時間:2024/1/23 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决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问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。