關於「java.lang.OutOfMemoryError : unable to create new native Thread」的報錯問題

好吧 我發誓這是postgresql的Mirroring Controller的RT測試的最後一個坑了。java

在這個RT測試的最後,要求測試Mirroring Controller功能在長時間運行下的穩定性和性能問題,使用postgresql的JDBC接口不斷的向數據庫中寫數據和讀數據。
在運行時,拋出了錯誤:sql

java.lang.OutOfMemoryError : unable to create new native Thread.shell

具體截圖以下:數據庫

在查看日誌文件的時候,也有如下出錯信息:服務器

Error occurred during initialization of VM...post

通過百度,找到方法:性能

既然報「OutOfMemoryError」,並且仍是「 unable to create new native Thread.」,那麼極可能是程序申請的Thread數超過了系統可以承載的限制。可是做爲一臺性能還不錯的服務器,沒理由系統資源不夠用啊?測試

好的,那咱們用ulimit命令查看一下系統的對進程資源的控制:日誌

ulimit -a

輸出以下:postgresql

彷佛是max user processes數不足?
仍是使用ulimit 命令,把max user processes放大一倍試試:

ulimit -u 2048  (使用postgres用戶運行該命令)

獲得:

(這裏值得說一下,由於我這裏只是想臨時改變當前shell的設置,要是想永久設置要修改/etc/security/limits.conf文件,請自行百度)。

修改完以後再運行:

一切OK!打完收工!

相關文章
相關標籤/搜索