升級CentOS6.6後Java新建執行緒丟擲O…
阿新 • • 發佈:2019-01-10
原來Java服務執行在CentOS5.4上正常,最近部署到CentOS6.6伺服器上。結果執行一段時間後,程式在執行新建執行緒操作的時候丟擲異常:“java.lang.OutOfMemoryError:
unable to create new native
thread”。這種情況一般是因為JVM記憶體不足,通過調整JVM記憶體引數就能搞定。但是我們的Java服務已經分配了很大的記憶體,當前實際使用並不多,用jstat檢視各區情況也都是很空閒的。所以基本可以排除這個可能。
我懷疑這是因為作業系統的限制導致的,通過對比/proc/程序ID/limits
檔案看出了一些線索:
對比發現max processes這個數值相比CentOS5.4機器上的數值要明顯的小。但是很奇怪的是,通過ulimit -Su 516035 的方式進行設定沒有效果。搜尋來搜尋去,最後搜尋到這篇 《Modify 'Soft Limit' of 'Max processes'》 。原來是CentOS6上對程序有額外的限制配置檔案。 [[email protected]~]# cat /etc/security/limits.d/90-nproc.conf # Default limit for number of user's processes to prevent # accidental fork bombs. # See rhbz #432903 for reasoning. * soft nproc 1024 root soft nproc unlimited 可以看到如果程式以root使用者執行,則nproc的軟限制是unlimited,其他使用者則是1024。由於此設定不符合我們需要,我們將第一排的數值改掉即可。我也是改為“ *
soft
nproc
unlimited",這樣就相當於沒有軟限制,只根據硬限制進行約束。
對比發現max processes這個數值相比CentOS5.4機器上的數值要明顯的小。但是很奇怪的是,通過ulimit -Su 516035 的方式進行設定沒有效果。搜尋來搜尋去,最後搜尋到這篇 《Modify 'Soft Limit' of 'Max processes'》 。原來是CentOS6上對程序有額外的限制配置檔案。 [[email protected]~]# cat /etc/security/limits.d/90-nproc.conf # Default limit for number of user's processes to prevent # accidental fork bombs. # See rhbz #432903 for reasoning. * soft nproc 1024 root soft nproc unlimited 可以看到如果程式以root使用者執行,則nproc的軟限制是unlimited,其他使用者則是1024。由於此設定不符合我們需要,我們將第一排的數值改掉即可。我也是改為“