Spring Cloud 開發內存佔用過高解決方法

作者:wanhuiguizong
來源:https://blog.csdn.net/wanhuiguizong/article/details/79289986

問題:

在開發spring cloud過程中一個很嚴重的資源問題就是內存佔用過高,而實際上本機開發測試並沒有很大的請求量,所以這是對電腦資源的一種嚴重的浪費,甚至導致IDE卡死、崩潰。

一個完整包含eureka,steam,sleuth,config,rabbit,oauth2等一些列spring cloud全家桶應用和其他業務相關組件組成的單個服務在12G內存電腦上啟動佔用的內存就達到1到1.5G。如果同時需要啟動很多個服務,內存完全不夠用。

解決方法:

修改IDE針對每個項目的jvm參數。

這裡以idea為例:

1. 打開Edit Configurations

Idea右上角,如圖:

Spring Cloud 開發內存佔用過高解決方法

2. 參考如下配置:

Spring Cloud 開發內存佔用過高解決方法

左邊如果是spring cloud 的話肯定是在spring boot下,如果沒有,可以點擊左上角的+號手動添加,一般啟動過的項目這裡會有的。

關於jvm參數後面會講。

這裡要注意的是,register項目不需要太多資源(我這裡設置128M),Gateway和config服務可以比register多一點(256M)。其它業務性服務才需要更多的資源(512M)。

請根據自己電腦配置情況調整,我的電腦是12G內存。

3. 關於jvm配置

參考1:http://blog.csdn.net/sdujava2011/article/details/50086933有如下描述

設置JVM內存的參數有四個:

-Xmx Java Heap最大值,默認值為物理內存的1/4,最佳設值應該視物理內存大小及計算機內其他內存開銷而定;

-Xms Java Heap初始值,Server端JVM最好將-Xms和-Xmx設為相同值,開發測試機JVM可以保留默認值;

-Xmn Java Heap Young區大小,不熟悉最好保留默認值;

-Xss 每個線程的Stack大小,不熟悉最好保留默認值;

參考2:https://www.cnblogs.com/w-wfy/p/6415856.html有如下描述:

一般用到最多的是

-Xms512m 設置JVM促使內存為512m。此值可以設置與-Xmx相同,以避免每次垃圾回收完成後JVM重新分配內存。

-Xmx512m ,設置JVM最大可用內存為512M。

-Xmn200m:設置年輕代大小為200M。整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代後,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。

-Xss128k:設置每個線程的堆棧大小。JDK5.0以後每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。更具應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。

效果

效果很明顯

12G內存啟動了14個服務和其他各種軟件(idea 3個),內存佔用如下圖:

Spring Cloud 開發內存佔用過高解決方法

Spring Cloud 開發內存佔用過高解決方法


分享到:


相關文章: