1. 程式人生 > >升級CentOS6.6後Java新建執行緒丟擲O…

升級CentOS6.6後Java新建執行緒丟擲O…

     原來Java服務執行在CentOS5.4上正常,最近部署到CentOS6.6伺服器上。結果執行一段時間後,程式在執行新建執行緒操作的時候丟擲異常:“java.lang.OutOfMemoryError: unable to create new native thread”。這種情況一般是因為JVM記憶體不足,通過調整JVM記憶體引數就能搞定。但是我們的Java服務已經分配了很大的記憶體,當前實際使用並不多,用jstat檢視各區情況也都是很空閒的。所以基本可以排除這個可能。      我懷疑這是因為作業系統的限制導致的,通過對比/proc/程序ID/limits 檔案看出了一些線索: 升級CentOS6.6後Java新建執行緒丟擲OutOfMemoryError異常的排查和解決

     對比發現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",這樣就相當於沒有軟限制,只根據硬限制進行約束。