好吧 我發誓這是postgresql的Mirroring Controller的RT測試的最后一個坑了。
在這個RT測試的最后,要求測試Mirroring Controller功能在長時間運行下的穩定性和性能問題,使用postgresql的JDBC接口不斷的向數據庫中寫數據和讀數據。
在運行時,拋出了錯誤:
java.lang.OutOfMemoryError : unable to create new native Thread.
具體截圖如下:
在查看日志文件的時候,也有以下出錯信息:
Error occurred during initialization of VM...
經過百度,找到方法:
既然報“OutOfMemoryError”,而且還是“ unable to create new native Thread.”,那么很可能是程序申請的Thread數超過了系統能夠承載的限制。但是作為一台性能還不錯的服務器,沒理由系統資源不夠用啊?
好的,那我們用ulimit命令查看一下系統的對進程資源的控制:
ulimit -a
輸出如下:
似乎是max user processes數不足?
還是使用ulimit 命令,把max user processes放大一倍試試:
ulimit -u 2048 (使用postgres用戶運行該命令)
得到:
(這里值得說一下,因為我這里只是想臨時改變當前shell的設置,要是想永久設置要修改/etc/security/limits.conf文件,請自行百度)。
修改完之后再運行:
一切OK!打完收工!