JVM最多能建立多少個線程: unable to create new native thread

來源:互聯網
上載者:User

最近需要測試一個長串連伺服器,資料上需要達到100W的長串連,測試的用戶端,一個線程保持一個串連,發現linux伺服器預設建立到3200多個線程的時候,就會報錯這個錯誤“java.lang.OutOfMemoryError: unable to create new native thread。而且,此時整個系統都不能創新新的線程了,不能串連終端,不能執行任何命令。

貌似是記憶體不足,但實際記憶體尚有富餘,經驗證,是linux的一些核心參數限制了建立新的線程。




因為要保持長串連,所有先修改用戶端保證更大的分配連接埠範圍修改 /etc/sysctl.conf添加這樣一行:net.ipv4.ip_local_port_range = 1024 61000


修改系統參數

echo "100000" > /proc/sys/kernel/threads-max
echo "100000" > /proc/sys/kernel/pid_max     (預設32768)
echo "200000" > /proc/sys/vm/max_map_count   (預設65530)


修改/etc/security/limits.conf*       -      nproc      999999
*       -      nofile      999999
PS:nproc是修改系統的max user processes大小;nofile  是修改open files的大小,另外linux 2.6.25核心之前有個宏定義,定義了這個值的最大值,為1024*1024,正好是100萬,而在2.6.25核心及其之後,這個值是可以通過/proc/sys/fs/nr_open來設定,不過,999999足夠用了。
很多人可能會遇到,只能啟動32000多個線程就不能再起更多的線程了,其實就是pid_max = 32768 給限制住了


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.