• 记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 pluginplugins {
    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'
    然后、写上mainClassbootRepackage {
    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应该还是可以的。

     

  • 相关阅读:
    ES6 fetch函数与后台交互
    玩转HTML5移动页面(动效篇)
    使用Flexible实现手淘H5页面的终端适配
    简单判断是否是微信打开页面代码
    移动端JS 触摸事件基础
    移动端中如何检测设备方向的变化?
    JS禁止横竖屏切换,强制横竖屏显示
    移动端Web开发如何处理横竖屏
    关于手机端CSS Sprite图标定位的一些领悟
    移动web页面使用微软雅黑字体的问题
  • 原文地址:https://www.cnblogs.com/telwanggs/p/15064142.html
Copyright © 2020-2023  润新知