公司的一台云服务器部署了若干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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

记spring boot线上项目内存优化的更多相关文章

  1. Spring Boot 定制与优化内置的Tomcat容器

    1.Spring Boot定制与优化内置Tomcat容器. > 内置的容器有三个分别是Undertow.Jetty.Tomcat,Spring Boot 对这三个容器分别进行了实现,它们上层接口 ...

  2. Spring Boot 实战与原理分析视频课程

    Spring Boot 实战与原理分析视频课程 链接:https://pan.baidu.com/share/init?surl=PeykcoeqZtd1d9lN9V_F-A 提取码: 关注公众号[G ...

  3. Spring boot 内存优化

    转自:https://dzone.com/articles/spring-boot-memory-performance It has sometimes been suggested that Sp ...

  4. Spring Boot 性能优化

    spring 框架给企业软件开发者提供了常见问题的通用解决方案,包括那些在未来开发中没有意识到的问题.但是,它构建的 J2EE 项目变得越来越臃肿,逐渐被 Spring Boot 所替代.Spring ...

  5. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  6. 从零一起学Spring Boot之LayIM项目长成记(三) 数据库的简单设计和JPA的简单使用。

    前言 今天是第三篇了,上一篇简单模拟了数据,实现了LayIM页面的数据加载.那么今天呢就要用数据库的数据了.闲言少叙,书归正传,让我们开始吧. 数据库 之前有好多小伙伴问我数据库是怎么设计的.我个人用 ...

  7. 这样优化Spring Boot,启动速度快到飞起!

    微服务用到一时爽,没用好就呵呵啦,特别是对于服务拆分没有把控好业务边界.拆分粒度过大等问题,某些 Spring Boot 启动速度太慢了,可能你也会有这种体验,这里将探索一下关于 Spring Boo ...

  8. 从零一起学Spring Boot之LayIM项目长成记(五)websocket

    前言 距离上一篇已经比较久的时间了,项目也是开了个头.并且,由于网上的关于Spring Boot的websocket讲解也比较多.于是我采用了另外的一个通讯框架 t-io 来实现LayIM中的通讯功能 ...

  9. 从零一起学Spring Boot之LayIM项目长成记(四) Spring Boot JPA 深入了解

    前言 本篇内容主要是一些关于JPA的常用的一些用法等.内容也是很多是看其他博客学来的,顺道在本系列博客里抽出一篇作为总结.下面让我们来看看吧. 不过我更推荐大家读本篇:https://lufficc. ...

  10. Java 架构师+高并发+性能优化+Spring boot大型分布式项目实战

    视频课程内容包含: 高级 Java 架构师包含:Spring boot.Spring cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.Zer ...

随机推荐

  1. ChatMoney让我重新找到创作灵感

    本文由 ChatMoney团队出品 今天是 2024 年 6月 19 日,星期三,哈喽大家好,我是一名乡野自媒体创作者小麦,基本上每天都会在自媒体的海洋中创作.重复着创作.创新.写稿.改稿.学习.复盘 ...

  2. VUE前端,小程序,APP签名盖章

    签名盖章功能就是把图片(签名或盖章) 与背景图片(需要签名的文件,如PDF) 合并起来,生成一个新的图片 此功能的开发流程顺序: 显示背景PDF 操作PDF:手势缩放,回到顶部,上下翻页 手绘签字功能 ...

  3. 浅谈ElasticSearch索引

    概述 官方文档:https://www.elastic.co/docs/manage-data/data-store/index-basics 索引是Elasticsearch中的基本存储单元,类似于 ...

  4. 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-20- 操作鼠标拖拽 - 上篇(详细教程)

    1.简介 本文主要介绍两个在测试过程中可能会用到的功能:在selenium中宏哥介绍了Actions类中的拖拽操作和Actions类中的划取字段操作.例如:需要在一堆log字符中随机划取一段文字,然后 ...

  5. C#常规操作

    线程池:ThreadPool.SetMaxThreads(辅助线程数,活跃线程数) ThreadPool.SetMinThreads(最小空闲辅助线程,最小空闲线程) ********* 检查是否按下 ...

  6. C/C++ 地震数据SEGY文件 IBM格式与PC格式的转换

    SEGY IO (IBM&PC) 本文档将介绍SEGY的读取与写入过程,其中包括IBM与PC两种数据格式的转换. 程序将调用IEEE2IBM.cpp文件完成IBM与PC格式的互相转换. 新建头 ...

  7. Games 103 cloth PDB 浅析

    简介 PDB 比 隐式积分法 速度快很多. 全称 Position Based Dynamics 粒子动力学系统, 什么是PBD呢? 个人的理解就是, 多次迭代, 达到一步的稳定状态. 然后更新整个系 ...

  8. 1007acm 感想

    代码是抄的 代码在 discuss里面 注释是思路, 简单的讲就是先把近的点放在一起然后看周围6个点的距离最近的值 #include <cstdio> using namespace st ...

  9. 02-Ble Paring(配对)和Bonding(绑定)的概念及流程

    基本概念 二者都是在蓝牙链路(LL)层实现的一种射频通信安全机制,需要注意的是,不经过配对和绑定蓝牙双方也是可以进行数据传输的.也就是说配对和绑定只是在蓝牙连接明文传输的 基础上实现了加密传输, 且由 ...

  10. English: 系动词:总结之 五种{1.be动词, 2.感官动词, 3.变化系动词, 4.持续系动词, 5.表象系动词}

    English: 系动词:总结之 五种 系动词共有以下五种 be动词 am, is, are, was, were 感官动词 look看起来, sound听起来, feel摸起来(感受上) smell ...