-
問題描述
最近上線的一個使用JAVA的Spring Cloud開發的ERP軟件,部署上線時發現很嚴重的內存資源占用過高問題,而實際上開發測試並沒有很大的訪問量,甚至卻出現了服務器無法正常訪問的現象。 -
原因分析
正常的我們一個接着一個的啟動微服務,然后還沒啟動完成,發現ssh遠程不響應,不能流暢的操作了,最開始以為是網絡掉了,發現打開其他資源正常。重啟服務器,然后監控服務器資源消耗情況,發現Spring Cloud的單個微服務部署到Linux系統服務器上時消耗的內存資源過大,在8G內存的linux系統服務器上啟動單個占用的內存就達到1G左右。部署了6個左右的微服務,內存已經嚴重不夠用了。在google看了下,很多人建議在eclipse或者idea上面進行jvm的參數設置:
但是,經過實際的部署驗證發現,還是沒有效果,這個本地開發測試時是應該是有用的。
最后發現根本原因是由於Spring-Boot工程的啟動參數配置問題,其實spring boot生成的jar包就是一個普通的jar包,這個jar包的jvm參數必須要從java -jar 的命令中,賦值設置內存占用最大最小和初始值才有作用。
- 解決方案
在Linux系統的服務器上面,啟動各個spring cloud的微服務jar包的時候,需要在java -jar
的命令中間增加jvm的內存參數設置:-Xms64m -Xmx128m
nohup java -Xms64m -Xmx128m -jar xxx.xxxx-xxx-xxxxxx.jar &
[root@iZuf692ot9nf1r9fn1unojZ ~]# nohup java -Xms64m -Xmx128m -jar erp-log-service.jar &
監控內存消耗,正常了。