记spring boot线上项目内存优化
2023-09-11 14:14:13 时间
公司的一台云服务器部署了若干spring boot项目,内存配置从4G加到了16G,但还是很吃紧,因为这几个项目用户量不大,负载也不高,于是决定想办法优化一下内存占用。以其中一个项目为例记录一下优化过程。
优化前
以gradle bootRun命令启动项目以后,会产生三个进程:GradleDaemon、GradleMain和Application进程。
占用内存情况如下:
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包了。
再看内存占用
现在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这个工具查看启动时的堆使用情况:
可以看到实际使用的堆大小不超过75M,所以128M应该还是可以的。
作者:wubin1989
链接:https://www.jianshu.com/p/abd9c24a6910
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章
- Spring定时器Quartz的用法
- spring: 创建环绕通知
- spring: 使用Spring提供的JDBC模板(使用profiles选择数据源/使用基于JDBC驱动的数据源)
- 10-spring学习-注入Resource
- Spring Boot 2.x :通过 spring-boot-starter-hbase 集成 HBase
- spring boot properties 编码问题[四]
- spring 学习2-Spring Configuration in detail
- [Spring学习笔记 3 ] spring 注解详解,完全注解,常用注解
- Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
- spring MVC配置详解
- Spring事务管理机制
- Spring MVC 学习
- Java Spring源代码学习之How is class annotation evaluated by Spring framework
- Spring多数据源分布式事务管理/springmvc+spring+atomikos[jta]+druid+mybatis
- Spring Boot 之Thymeleaf的爆红用注解【<!--/*@thymesVar id=“data“ type=“ch“*/-->】解决
- 掌握 Spring Boot 运行内存及内存参数设置:助力高效应用部署与优化
- Spring Boot 之spring.factories
- vert.x框架-使用spring注解功能
- 009-Spring Boot 事件监听、监听器配置与方式、spring、Spring boot内置事件
- 【Spring源码学习】spring IOC容器管理
- Spring获取到bean的几种方式