1. 程式人生 > >Linux最大執行緒數限制

Linux最大執行緒數限制

研發環境上的Linux專案啟動報錯:Caused by: java.lang.OutOfMemoryError: unable to create new native thread

開始以為是記憶體不足導致無法建立執行緒,把jvm的-Xms,-Xmx的2個引數都加大一倍:-Xms2048m -Xmx2048m。把-Xss引數調小,還是啟動失敗。應該是系統方面的限制了,這臺機器上搞了100個過tomcat程序,還有不少其他軟體,東西比較多且雜。確認過機器的記憶體還是足夠的,先排查系統引數,之後再清理垃圾資源了。
系統可生成最大執行緒數

cat /proc/sys/kernel/threads-max
這個值很大,tomcat程序的全部執行緒數肯定沒有超過它,如果實際執行緒數比它大可改大(實際可能是程式碼問題,開啟了太多執行緒)。
程序最大執行緒數

ps -eLf | grep 專案名 | wc -l 檢視單個專案執行緒數,啟動失敗的這個專案執行緒數一般在600左右
cat /proc/sys/vm/max_map_count
65530
這個值沒有問題,jvm的啟動引數為-Dconfig.server.maxThreads=3000,也沒有問題
使用者最大程序數

ulimit -a
其中max user processes就是表示使用者的最大程序數,我的這個值很大,程序數也沒有超過它。如果超過的話,可以修改最大程序數的配置
vi /etc/security/limits.d/90-nproc.conf
* soft nproc 1024
root soft nproc unlimited
上面可以看除了root使用者外的所有使用者均限制為1024,因此通過可以註釋此行或者將值改大,儲存後修改立刻生效
#* soft nproc 1024
root soft nproc unlimited
整個系統已用的執行緒或程序數

cat /proc/sys/kernel/pid_max
該值是32678(32位Linux系統可建立的最大pid數是32678),查詢當前整個系統已用的執行緒或程序數:pstree -p | wc -l,結果比32678稍小,問題就在這了

vim /proc/sys/kernel/pid_max,改為65535儲存退出的時候報錯如下
/proc/sys/kernel/pid_max E667 Fsync failed
改成下面方式即可:
echo "65535" > /proc/sys/kernel/pid_max
不需要重啟,儲存後立刻生效,重啟專案終於好了
---------------------
作者:Scub
來源:CSDN
原文:https://blog.csdn.net/u013673976/article/details/51788566
版權宣告:本文為博主原創文章,轉載請附上博文連結!