springboot设置运⾏内存_SpringBoot深度调优,提升项⽬性能blog.csdn/weixin_31258847/article/details/112166950
项⽬调优
作为⼀名⼯程师,项⽬调优这事,是必须得熟练掌握的事情。
在SpringBoot项⽬中,调优主要通过配置⽂件和配置JVM的参数的⽅式进⾏。
⼀、修改配置⽂件
关于修改配置⽂件application.properties。
SpringBoot项⽬详细的配置⽂件修改⽂档
docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#common-application-properties
其中⽐较重要的有:
esses at any given
at.max-http-header-size=0 # Maximum size, in bytes, of the HTTP message at.max-http-post-size=0 # Maximum size, in bytes, of the HTTP post at.max-threads=0 # Maximum number of worker at.min-spare-threads=0 # Minimum number of worker threads.
⼆、Jvm调优
关于Jvm调优Oracle官⽹有⼀份指导说明:
acle/middleware/11119/wls/PERFM/jvm_tuning.htm#i1146060
有兴趣⼤家可以去看看。
三、Jvm调优实战
1、未设置JVM参数的情况
我现在有⼀个项⽬,默认情况下,没有设置任何Jvm参数。
下⾯我来启动看⼀下。
springboot中文看⼀下堆栈分配:
很明显默认的最⼤堆内存分配了8个G。很明显的不合理嘛。
2、下⾯我们来设置下Jvm参数
例如要配置JVM这么⼀⼤段参数:
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
⽅式⼀:
如果你⽤的是IDEA等开发⼯具,来启动运⾏项⽬,那么要调试JDK就⽅便太多了。
只需要将参数值设置到VM options中即可。
设置成功,我的GC⽇志和堆栈分配都已经OK了。
GC⽇志:
堆栈分配:
⽅式⼆:
适⽤于在项⽬部署后,在启动的时候,采⽤脚本或者命令⾏运⾏的时候设置。先在项⽬路径下,给项⽬打包:
清理就旧项⽬
mvn clean
打包新项⽬:
mvn package -st.skip=true
打包完成后进⼊可运⾏Jar包的路径下:
执⾏启动设置Jvm参数的操作。
$ java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn
256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC newframe-1.0.0.jar
这个时候,你再看监控,你就会发现,已经是Ok的了。
堆栈都是按照启动时候,设置的Jvm参数启动的。
关于这些设置的JVM参数是什么意思,请参考第⼆步中的oracle官⽅给出的调优⽂档。
我在这边简单说⼀下:
-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,中⽂名叫元空间。
使⽤本地化的内存有什么好处呢?最直接的表现就是java.lang.OutOfMemoryError: PermGen 空间问题将不复存在,因为默认的类的元数据分配只受本地内存⼤⼩的限制,也就是说本地内存剩余多少,理论上Metaspace就可以有多⼤(貌似容量还与操作系统的虚拟内存有关?这⾥不太清楚),这解决了空间不⾜的问题。
不过,让Metaspace变得⽆限⼤显然是不现实的,因此我们也要限制Metaspace的⼤⼩:使⽤-XX:MaxMetaspaceSize参数来指定Metaspace区域的⼤⼩。JVM默认在运⾏时根据需要动态地设置MaxMetaspaceSize的⼤⼩。
作者:星朝 cnblogs/jpfss/p/9753215.html
相关资源:Jvm调优和SpringBoot项⽬优化的详细教程_springboot性能调优...
————————————————
版权声明:本⽂为CSDN博主「知乎科学」的原创⽂章,遵循CC 4.0 BY-SA版权协议,转载请附上原⽂出处链接及本声明。
原⽂链接:blog.csdn/weixin_31258847/article/details/112166950
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论