問題現象: Tomcat(8.5.13)部署了SuperMap iServer,併發用戶在100左右。系統運行一段時間後,服務崩潰。異常提示 問題分析: 1、看到日誌中的提示信息後,認為是系統記憶體不足導致的。於是在伺服器上添加了監控腳本(如下圖),每1s記錄一次系統記憶體和tomcat記憶體。 監控一段 ...
問題現象:
Tomcat(8.5.13)部署了SuperMap iServer,併發用戶在100左右。系統運行一段時間後,服務崩潰。異常提示
問題分析:
1、看到日誌中的提示信息後,認為是系統記憶體不足導致的。於是在伺服器上添加了監控腳本(如下圖),每1s記錄一次系統記憶體和tomcat記憶體。
監控一段時間後,異常再次出現。從日誌中並未發現記憶體異常
2、記憶體排除後,思路轉到是否是由於併發用戶數太多,導致的進程數超出呢?
1)查看linux 當前用戶的資源限制參數 ulimit -a
2)在上面這些參數中,關註得比較多的是一個進程可打開的最大文件數,即open files。系統允許創建的最大進程數量即是max user processes 這個參數。 我們可以使用 ulimit -u 4096 修改max user processes的值,但是只能在當前終端的這個session裡面生效,重新登錄後仍然是使用系統預設值。
正確的修改方式是修改/etc/security/limits.d/90-nproc.conf文件中的值。先看一下這個文件包含什麼:
$ 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 4096
我們只要修改上面文件中的4096這個值,即可。
經過排查,確實是由於伺服器當前用戶設置的最大進程數設置太小導致的無法創建進程,崩潰。
參考:http://www.linuxidc.com/Linux/2011-03/33121.htm
http://www.cnblogs.com/billyxp/archive/2013/04/03/2998079.html
linux 查看當前進程:http://os.51cto.com/art/201101/244090.htm
http://www.linuxidc.com/Linux/2015-01/111270.htm