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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

jvm调优:能生成的线程数

發布時間:2024/4/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jvm调优:能生成的线程数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自:http://blog.sina.com.cn/s/blog_684fe8af0100wzge.html

?

windows機器(32位的 )上調試一個代碼的時候報了一個如下錯誤

?

Java代碼 ?
  • java.lang.OutOfMemoryError:?unable?to?create?new?native?thread??
  • java.lang.OutOfMemoryError: unable to create new native thread

    ?

    第一眼看上去是OOM,有點傻眼,因為我的內存啟動參數是“-Xms1024m -Xmx1024m -Xss45m”,而我很清楚這個代碼大概的內存消耗。奇怪的是進程還沒退出,于是打開visualvm監控了一下,發現heap空間還有大量剩余。

    ?

    于是把目光焦點放在了“unable to create new native thread.”

    jvm 堆和棧內存還完全夠用的情況下,出現OOM,是第一次注意(也許以前潛意識里,OOM肯定是heap或perm空間不夠用了)。之前沒分析這類錯誤,通過google大神,大概了解了一下錯誤所以在此記錄一下。

    ?

    大概的原因如下:

    當我們在jvm里創建一個線程的時候同樣會在OS里創建一個本地線程,本地線程使用的是進程最大空間里且是JVM之外的內存。一個本地線程的線程棧空間剛好是我們jvm里指定的Xss。

    由此,網上查到的最大可創建線程數公式是:

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

    MaxProcessMemory:進程最大尋址空間。

    JVMMMEMORY:jvm的內存空間(堆+永久區)

    ReservedOsMemory:操作系統預留內存

    ThreadStackSize:XSS大小。

    ?

    剛好本人這個啟動參數里把Xss設置程了45m(因為有遞歸且不缺定深度),所以如果預估ReservedOsMemory是100的情況,可以創建的線程數量如下:

    (2G-1024m-100m)/45m=20.

    而本程序里需要創建的線程是不止20的,也難怪會爆出這個異常了。

    后面本人通過修改Xss的參數,問題得到解決。

    網上也有說有其他的方式來避免,沒有細細探究,高手可以出來拍磚。如果分析有錯誤之處,也請高手也可以出來拍拍磚。

    ?

    另外我在本人64位的開發機賞試了下,-Xms1024m -Xmx1024m -Xss200m參數下開了幾百個線程也沒問題,不知道公式對不對,有說64位機器的進程最大內存空間是4G,如果真的是4G,顯然不能創建這么多的。

    ?

    ?

    另外補充以下幾個OOM的類型:

    1. java.lang.OutOfMemoryError: Java heap space? 堆空間不足
    2. java.lang.OutOfMemoryError: PermGen space?? 永久區不足
    3. java.lang.OutOfMemoryError: Requested array size exceeds VM limit
    4. java.lang.OutOfMemoryError: <reason> <stack trace> (Native method)

    ?

    參考

    http://www.openkb.org/java-out-of-memory-unable-to-create-new-native-thread/

    http://www.blogjava.net/ldd600/archive/2009/09/25/296397.html

    總結

    以上是生活随笔為你收集整理的jvm调优:能生成的线程数的全部內容,希望文章能夠幫你解決所遇到的問題。

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