首页 > 其他分享 >SpringBoot项目优化和JVM调优

SpringBoot项目优化和JVM调优

时间:2023-09-24 14:45:36浏览次数:31  
标签:SpringBoot MaxMetaspaceSize server XX 调优 JVM 128m

在开发中项目调优是必须得熟练掌握的事情。在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。

修改配置文件

关于修改配置文件application.properties,可参考SpringBoot详细配置文件

其中比较重要的有:

# Maximum number of connections that the server accepts and processes at any given time.
server.tomcat.max-connections=0 
# Maximum size, in bytes, of the HTTP message header.
server.tomcat.max-http-header-size=0 
# Maximum size, in bytes, of the HTTP post content.
server.tomcat.max-http-post-size=0 
# Maximum number of worker threads.
server.tomcat.max-threads=0 
# Minimum number of worker threads.12345
server.tomcat.min-spare-threads=0

关于JVM调优可以看 Oracle官网指导说明

JVM调优实战

1、未设置JVM参数的情况

一个项目默认情况下没有设置任何JVM参数。启动如下。
image

看一下堆栈分配:很明显默认的最大堆内存分配了8个G。很明显的不合理。
image

2、如何设置JVM参数

例如要配置如下JVM参数:

-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC1

方式一: 如果是IDEA等开发工具来启动项目,只需要将参数值设置到VM options中即可。
image

设置成功,GC日志和堆栈分配都已经OK了。

GC日志:
image

堆栈分配:
image

方式二: 适用于在项目部署后,在启动的时候,采用脚本或者命令行运行的时候设置。

先给项目打包:清理旧项目

mvn clean

打包新项目:

mvn package -Dmaven.test.skip=true

打包完成后进入可运行Jar包的路径下启动
执行启动设置Jvm参数的操作。

$ java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC newframe-1.0.0.jar1

启动项目可以看到堆栈都是按照启动时设置的Jvm参数启动的。
image

3、JVM参数的含义?

关于这些设置的JVM参数是什么意思,这边简单说一下:

  • -XX:MetaspaceSize=128m (元空间默认大小)
  • -XX:MaxMetaspaceSize=128m (元空间最大大小)
  • -Xms1024m(堆默认大小)
  • -Xmx1024m (堆最大大小)
  • -Xmn256m (新生代大小)
  • -Xss256k (棧最大深度大小)
  • -XX:SurvivorRatio=8 (新生代分区比例 8:2)
  • -XX:+UseConcMarkSweepGC (指定使用的垃圾收集器,这里使用CMS收集器)
  • -XX:+PrintGCDetails (打印详细的GC日志)

拓展点:

JDK8之后把 -XX:PermSize 和 -XX:MaxPermGen 移除了,取而代之的是
-XX:MetaspaceSize=128m (元空间默认大小)
-XX:MaxMetaspaceSize=128m (元空间最大大小)
JDK 8开始把类的元数据放到本地化的堆内存(native heap)中,这一块区域就叫Metaspace,中文名叫元空间。

4、使用本地化的内存有什么好处呢?

最直接的表现就是 java.lang.OutOfMemoryError: PermGen

空间问题将不复存在,因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上 Metaspace 就可以有多大(貌似容量还与操作系统的虚拟内存有关?这里不太清楚),这解决了空间不足的问题。不过,让 Metaspace 变得无限大显然是不现实的,因此我们也要限制 Metaspace 的大小:使用 -XX:MaxMetaspaceSize 参数来指定 Metaspace 区域的大小。JVM 默认在运行时根据需要动态地设置 MaxMetaspaceSize 的大小。

标签:SpringBoot,MaxMetaspaceSize,server,XX,调优,JVM,128m
From: https://www.cnblogs.com/yang-yz/p/17725949.html

相关文章

  • 基于SpringBoot的书籍阅读管理系统设计与实现-计算机毕业设计源码+LW文档
    摘要:书籍阅读管理系统是针对目前书籍阅读管理的实际需求,从实际工作出发,对过去的书籍阅读管理系统存在的问题进行分析,完善客户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。本系统结合计算机系统的结构、概念、模型、原......
  • 基于SpringBoot的校园疫情防控系统-计算机毕业设计源码+LW文档
    一、选题的背景与意义开发背景21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利。像大部分的企事业单位等机构都有自己的管理系统,由传统的管理模式向互联网发展,如今开发自己的系统是时代发展的必然产物。那么开发校园疫情防控系统意义和用处有哪些呢?......
  • 基于SpringBoot的幼儿园管理系统-计算机毕业设计源码+LW文档
    摘 要幼儿园管理系统是一种以信息技术为基础,为幼儿园提供全面管理和服务的软件系统。本文旨在设计并实现一种针对幼儿园管理的信息化系统,以提高幼儿园的管理效率、服务质量和家长满意度。本文首先介绍了幼儿园管理系统的背景和意义,以及相关的技术和理论基础。随后,对幼儿园管理......
  • 基于Springboot的准妈妈孕期交流平台的设计与实现-计算机毕业设计源码+LW文档
    系统的背景及意义 智能化的高校排课系统是基于WEB的校园教务信息综合管理系统的一项重要功能,能很好的解决上述问题。为响应我国的教育改革和素质教育的号召,学生自主选课及校园内日常标准化选课的信息量日夜增长,合理安排课程的工作量与复杂程度也随之增大,手工管理的传统模式已经......
  • 修改jmeter的jvm参数
    加班途中开发问加的jvm参数怎么没生效,随即补一篇。 windowsjmeter.bat中,添加:setHEAP=-Xms2g-Xmx2g-XX:MaxMetaspaceSize=512msetGC_ALGO=-XX:+UseG1GC-XX:MaxGCPauseMillis=100-XX:G1ReservePercent=20 linuxjmeter中,添加:HEAP="-Xms2g-Xmx2g-XX:MaxMetaspa......
  • Springboot+Mybatis(四)
    单独说一下Mybatis-plus上一篇中介绍了Mybatis的使用方法,对于Mybatisplus,我理解就是把一些方法提前封装好了,不需要自己定义接口类中的内容只需要直接调用即可,把接口类添加继承关系 这里要说的是BaseMapper后面的<User>是要搜索的类的名词,且最好类的名字和表的名字保持一致,......
  • Springboot+Mybatis(三)
    今天学习了如何使用Mybatis实现增删改查为此做一个梳理发表一篇博客,也是为了总结一下首先,要使用Mybatis需要添加依赖从建立项目的时候选择java8+Springboot2这样的方式,避免高版本存在一些兼容性的问题然后添加Mybatis-plus依赖,老师讲的是添加了plus会自动添加Mybatis的依赖,但......
  • springBoot上传文件时MultipartFile报空问题解决方法
    1.问题描述:之前用springMVC,转成springboot之后发现上传不能用。网上参考说是springboot已经有CommonsMultipartResolver了,但是我的上传后台接收的还是null。2.解决方法加入配置类importorg.springframework.context.annotation.Bean;importorg.springframework.context......
  • SpringBoot开发实战(微课视频版)
    ISBN:978-7-302-52819-7编著:吴胜页数:311页阅读时间:2023-06-24推荐指数:★★★★☆本文介绍SpringBoot2.0.5、JDK1.8,虽然现在已经不维护了,但是大体的流程还是对口的,而且书里面讲解的也比较简单易懂,还是推荐阅读的。第一章:SpringBoot简介SpringBoot发展背景、特征、工......
  • springboot的Maven的镜像
     Maven的镜像<!--阿里镜像--><mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyunmaven</name><url>http://maven.aliyun.com/nexus/content/repositories/central/</url>......