【程序员BUG】真实有效),SpringBoot项目优化和Jvm调优(亲测

作者:星期
来源:cnblogs.com/jpfss/p/9753215.html
项目调优作为一名工程师 , 项目调优这事 , 是必须得熟练掌握的事情 。 在SpringBoot项目中 , 调优主要通过配置文件和配置JVM的参数的方式进行 。 在这边有一篇比较好的文章 , 推荐给大家!
SpringBoot项目配置Tomcat和JVM参数
一、修改配置文件关于修改配置文件application.properties 。
SpringBoot项目详细的配置文件修改文档
其中比较重要的有:
server.tomcat.max-connections=0#Maximumnumberofconnectionsthattheserveracceptsandprocessesatanygiventime.server.tomcat.max-http-header-size=0#Maximumsize,inbytes,oftheHTTPmessageheader.server.tomcat.max-http-post-size=0#Maximumsize,inbytes,oftheHTTPpostcontent.server.tomcat.max-threads=0#Maximumnumberofworkerthreads.server.tomcat.min-spare-threads=0#Minimumnumberofworkerthreads.二、Jvm调优关于Jvm调优Oracle官网有一份指导说明:
Oracle官网对Jvm调优的说明
有兴趣大家可以去看看 。
三、Jvm调优实战1、未设置JVM参数的情况我现在有一个项目 , 默认情况下 , 没有设置任何Jvm参数 。 下面我来启动看一下 。
【程序员BUG】真实有效),SpringBoot项目优化和Jvm调优(亲测
文章图片
看一下堆栈分配:很明显默认的最大堆内存分配了8个G 。 很明显的不合理嘛 。
【程序员BUG】真实有效),SpringBoot项目优化和Jvm调优(亲测
文章图片
2、下面我们来设置下Jvm参数例如要配置JVM这么一大段参数:
-XX:MetaspaceSize=128m-XX:MaxMetaspaceSize=128m-Xms1024m-Xmx1024m-Xmn256m-Xss256k-XX:SurvivorRatio=8-XX:+UseConcMarkSweepGC1方式一:如果你用的是IDEA等开发工具 , 来启动运行项目 , 那么要调试JDK就方便太多了 。 只需要将参数值设置到VMoptions中即可 。
【程序员BUG】真实有效),SpringBoot项目优化和Jvm调优(亲测
文章图片
设置成功 , 我的GC日志和堆栈分配都已经OK了 。
GC日志:
【程序员BUG】真实有效),SpringBoot项目优化和Jvm调优(亲测
文章图片
堆栈分配:
【程序员BUG】真实有效),SpringBoot项目优化和Jvm调优(亲测
文章图片
【【程序员BUG】真实有效),SpringBoot项目优化和Jvm调优(亲测】方式二:适用于在项目部署后 , 在启动的时候 , 采用脚本或者命令行运行的时候设置 。
先在项目路径下 , 给项目打包:清理就项目
mvnclean1
【程序员BUG】真实有效),SpringBoot项目优化和Jvm调优(亲测
文章图片
打包新项目:
mvnpackage-Dmaven.test.skip=true打包完成后进入可运行Jar包的路径下:
【程序员BUG】真实有效),SpringBoot项目优化和Jvm调优(亲测
文章图片
执行启动设置Jvm参数的操作 。
$java-jar-XX:MetaspaceSize=128m-XX:MaxMetaspaceSize=128m-Xms1024m-Xmx1024m-Xmn256m-Xss256k-XX:SurvivorRatio=8-XX:+UseConcMarkSweepGCnewframe-1.0.0.jar这个时候 , 你再看监控 , 你就会发现 , 已经是Ok的了 。 堆栈都是按照启动时候 , 设置的Jvm参数启动的 。
【程序员BUG】真实有效),SpringBoot项目优化和Jvm调优(亲测
文章图片
关于这些设置的JVM参数是什么意思 , 请参考第二步中的oracle官方给出的调优文档 。
我在这边简单说一下:
-XX:MetaspaceSize=128m(元空间默认大小)-XX:MaxMetaspaceSize=128m(元空间最大大小)-Xms1024m(堆最大大小)-Xmx1024m(堆默认大小)-Xmn256m(新生代大小)-Xss256k(棧最大深度大小)-XX:SurvivorRatio=8(新生代分区比例8:2)-XX:+UseConcMarkSweepGC(指定使用的垃圾收集器 , 这里使用CMS收集器)-XX:+PrintGCDetails(打印详细的GC日志)