项目调优作为一名工程师,项目调优是必须要掌握的东西。在SpringBoot项目中,主要通过配置文件和JVM参数进行调优。1.修改配置文件关于修改配置文件application.properties。https://docs.spring.io/spring...比较重要的有:server.tomcat.max-connections=0#服务器在任何给定时间接受和处理的最大连接数.server.tomcat.max-http-header-size=0#HTTP消息的最大大小,以字节为单位header.server.tomcat.max-http-post-size=0#HTTPpost的最大大小,以字节为单位content.server.tomcat.max-threads=0#最大工作线程数.server.tomcat.min-spare-threads=0#最小工作线程数。二、Jvm调优Oracle官网有关于Jvm调优的指南:https://docs.oracle.com/middl...三、Jvm调优实践1、没有设置JVM参数的情况。我现在有一个项目。默认情况下,没有设置Jvm参数。让我现在开始吧。看栈分配:很明显默认的最大堆内存分配是8G,显然不合理。2.接下来,让我们设置Jvm参数。比如配置这么大一段的JVM参数:-XX:MetaspaceSize=128m-XX:MaxMetaspaceSize=128m-Xms1024m-Xmx1024m-Xmn256m-Xss256k-XX:SurvivorRatio=8-XX:+UseConcMarkSweepGC方法一:如果使用使用IDEA等开发工具启动并运行项目,之后调试JDK就方便多了。只需将参数值设置为VM选项。设置成功,我的GC日志和堆栈分配都正常。GClog:Stackallocation:方法二:适合在项目部署后、启动时、脚本或命令行运行时设置。首先将项目打包到项目路径下:清理项目mvnclean打包新项目:mvnpackage-Dmaven.test.skip=true打包完成后进入可执行Jar包路径:执行启动操作并设置Jvm参数。$java-jar-XX:MetaspaceSize=128m-XX:MaxMetaspaceSize=128m-Xms1024m-Xmx1024m-Xmn256m-Xss256k-XX:SurvivorRatio=8-XX:+UseConcMarkSweepGCnewframe-1.0.0.jar你会发现已经OK了.栈根据启动时设置的Jvm参数启动。这些设置的JVM参数的含义请参考第二步oracle官方给出的调优文档。这里简单说一下:-XX:MetaspaceSize=128m(元空间的默认大小)-XX:MaxMetaspaceSize=128m(元空间的最大大小)-Xms1024m(堆的最大大小)-Xmx1024m(堆的默认大小)-Xmn256m(新studentgenerationsize)-Xss256k(最大栈深度大小)-XX:SurvivorRatio=8(新生代分区比例8:2)-XX:+UseConcMarkSweepGC(指定使用的垃圾收集器,这里使用CMS收集器)-XX:+PrintGCDetails(打印详细的GC日志)知识点:JDK8后去掉了-XX:PermSize和-XX:MaxPermGen,取而代之的是-XX:MetaspaceSize=128m(元空间默认大小)-XX:MaxMetaspaceSize=128m(元空间最大大小)JDK8开始将类的元数据放入本地化堆内存(nativeheap)。这个区域叫做元空间,中文叫元空间。使用局部内存有什么好处?最直接的表现就是java.lang.OutOfMemoryError:PermGenspace问题将不再存在,因为默认类的元数据分配只受本地内存大小的限制,也就是说剩余的本地内存量可以理论上和Metaspace一样大(好像容量也跟操作系统的虚拟内存有关?这里不清楚),解决了空间不足的问题。但是,让Metaspace无限大显然是不现实的,所以我们还得限制Metaspace的大小:使用-XX:MaxMetaspaceSize参数来指定Metaspace区域的大小。默认情况下,JVM在运行时根据需要动态设置MaxMetaspaceSize的大小。好吧,祝你学习和工作一切顺利!
