記spring boot線上項目內存優化


公司的一台雲服務器部署了若干spring boot項目,內存配置從4G加到了16G,但還是很吃緊,因為這幾個項目用戶量不大,負載也不高,於是決定想辦法優化一下內存占用。以其中一個項目為例記錄一下優化過程。

優化前

以gradle bootRun命令啟動項目以后,會產生三個進程:GradleDaemon、GradleMain和Application進程。

 

 

 

jps截圖

占用內存情況如下:
 

 

 

mac活動監視器截圖

GradleDaemon和GradleMain進程合起來占用400多M,其實很多余,於是決定把項目打成jar包,通過java -jar命令來啟動服務。

 

spring boot項目打成jar包

首先、在build.gradle文件里加上spring boot gradle plugin

plugins { id "org.springframework.boot" version "1.5.9.RELEASE" } 

或者是

buildscript {
    ext {
        springBootVersion = '1.5.9.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath(
          "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
 
apply plugin: 'org.springframework.boot'

其次、因為目的是打成可執行jar包,所以還要加上

apply plugin: 'java'

然后、寫上mainClass

bootRepackage {
    mainClass = 'com.idatage.XXXApplication'
}

最后、命令行輸入如下命令

gradle clean build

就在build/libs目錄下生成可執行jar包了。

再看內存占用

 

 

 

 

jps截圖

現在GradleDaemon和GradleMain進程都沒有了。但是...
 

 

 

活動監視器截圖

內存占用不降反增。看來我得靠調節jvm參數了。

 

調節jvm參數

通過設定Xmx(程序運行期間最大可占用的內存大小)、Xss(jvm啟動的每個線程分配的內存大小)、XX:ParallelGCThreads(GC線程數)以及關閉了JIT功能,達成了降低內存占用的目的。

java -Xmx128m -Xss256k -XX:ParallelGCThreads=2 -Djava.compiler=NONE -jar build/libs/XXX.jar
 

 

 

活動監視器截圖

現在內存降到了200M以內了。

為了確保Xmx128m這個參數值合理,我用了jvisualvm這個工具查看啟動時的堆使用情況:


 

 

 

jvisualvm截圖

可以看到實際使用的堆大小不超過75M,所以128M應該還是可以的。



作者:wubin1989
鏈接:https://www.jianshu.com/p/abd9c24a6910
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM