好吧 我發誓這是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!打完收工!