精华内容
下载资源
问答
  • springboot优化JVM参数

    2020-10-17 16:34:01
    1:在idea中配置 1.1:参数 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC1 1.2:设置方式 在Configuration->VM ...

    写在前面

    参考的这里,此处只是为了记录,以防在工作中需要使用到。

    1:在idea中配置

    1.1:参数

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

    1.2:设置方式

    Configuration->VM options中设置即可,如下图:
    在这里插入图片描述

    2:启动jar时指定

    java -jar -XX:MetaspaceSize=128m 
    -XX:MaxMetaspaceSize=128m 
    -Xms1024m 
    -Xmx1024m 
    -Xmn256m 
    -Xss256k 
    -XX:SurvivorRatio=8 
    -XX:+UseConcMarkSweepGC 
    newframe-1.0.0.jar
    
    展开全文
  • 方式1(推荐/比较稳妥): 开启GC日志打印,例配置jvm参数 -XX:+PrintGC 观察多次Full GC后老年代存活对象的大小取平均值为准 方式2:(强制触发FullGC, 会影响线上服务,慎用) 方式1的方式比较可行,但需要更改...

    参考:

    https://www.cnblogs.com/zhangfengshi/p/11343102.html

    https://blog.csdn.net/chenming60999/article/details/100841202

    依据的原则是根据Java Performance里面的推荐公式来进行设置。

     

    具体来讲:

    Java整个堆大小设置,Xmx 和 Xms设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍

    永久代(jdk8为元数据MetaSpace)PermSize和MaxPermSize设置为老年代存活对象的1.2-1.5倍。

    年轻代Xmn的设置为老年代存活对象的1-1.5倍。

    老年代的内存大小设置为老年代存活对象的2-3倍。默认新生代与老年代的比例为 1:2 ,不冲突。

    BTW:

         1、Sun官方建议年轻代的大小为整个堆的3/8左右, 所以按照上述设置的方式,基本符合Sun的建议。 

         2、堆大小=年轻代大小+年老代大小, 即xmx=xmn+老年代大小 。 Permsize不影响堆大小。

         3、为什么要按照上面的来进行设置呢? 没有具体的说明,但应该是根据多种调优之后得出的一个结论。

     

    如何确认老年代存活对象大小?

    方式1(推荐/比较稳妥):

          开启GC日志打印,例配置jvm参数 -XX:+PrintGC 观察多次Full GC后老年代存活对象的大小取平均值为准

    方式2:(强制触发FullGC, 会影响线上服务,慎用)

         方式1的方式比较可行,但需要更改JVM参数,并分析日志。同时,在使用CMS回收器的时候,有可能不能触发FullGC(只发生CMS GC),所以日志中并没有记录FullGC的日志。在分析的时候就比较难处理。

         BTW:使用jstat -gcutil工具来看FullGC的时候, CMS GC是会造成2次的FullGC次数增加。 具体可参见之前写的一篇关于jstat使用的文章

         所以,有时候需要强制触发一次FullGC,来观察FullGC之后的老年代存活对象大小。

         注:强制触发FullGC,会造成线上服务停顿(STW),要谨慎,建议的操作方式为,在强制FullGC前先把服务节点摘除,FullGC之后再将服务挂回可用节点,对外提供服务

         在不同时间段触发FullGC,根据多次FullGC之后的老年代内存情况来预估FullGC之后的老年代存活对象大小。

    如何触发FullGC ?

                   使用jmap工具可触发FullGC 

                   jmap -dump:live,format=b,file=heap.bin <pid> 将当前的存活对象dump到文件,此时会触发FullGC

                   jmap -histo:live <pid> 打印每个class的实例数目,内存占用,类全名信息.live子参数加上后,只统计活的对象数量. 此时会触发FullGC

    补充

    -Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一

    以下两个参数配置对于测试环境springboot项目就够用了,生产环境可以适当按比例扩大一些。

    -Xms256m -Xmx256m -Xmn64m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m

    -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m

     

    展开全文
  • springboot-jvm调优

    2019-12-23 16:28:43
    SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。 在这边有一篇比较好的文章,推荐给大家!SpringBoot项目配置Tomcat和JVM参数 一、修改配置文件 关于修改配置文件application.properties。...

    项目调优

    作为一名工程师,项目调优这事,是必须得熟练掌握的事情。
    在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。
    在这边有一篇比较好的文章,推荐给大家!
    SpringBoot项目配置Tomcat和JVM参数

    一、修改配置文件

    关于修改配置文件application.properties
    SpringBoot项目详细的配置文件修改文档

    其中比较重要的有:

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

    二、Jvm调优

    关于Jvm调优Oracle官网有一份指导说明:
    Oracle官网对Jvm调优的说明
    有兴趣大家可以去看看。

    三、Jvm调优实战

    1、未设置JVM参数的情况

    我现在有一个项目,默认情况下,没有设置任何Jvm参数。
    下面我来启动看一下。

    这里写图片描述

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

    这里写图片描述

    2、下面我们来设置下Jvm参数

    例如要配置JVM这么一大段参数:

    -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
    • 1

    方式一:
    如果你用的是IDEA等开发工具,来启动运行项目,那么要调试JDK就方便太多了。
    只需要将参数值设置到VM options中即可。

    这里写图片描述

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

    GC日志:

    这里写图片描述

    堆栈分配:

    这里写图片描述

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

    先在项目路径下,给项目打包:
    清理就项目

    mvn clean
    • 1

    这里写图片描述

    打包新项目:

     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.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的大小。

    展开全文
  • SpringBoot JVM参数调优

    万次阅读 2019-05-16 16:15:51
    各种参数 参数名称 含义 默认值 说明 ...默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大...默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms...

    各种参数

    参数名称 含义 默认值 说明
    -Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制.
    -Xmx 最大堆大小 物理内存的1/4(<1GB) 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
    -Xmn 年轻代大小(1.4or lator) 注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小. 增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
    -XX:NewSize 设置年轻代大小(for 1.3/1.4)
    -XX:MaxNewSize 年轻代最大值(for 1.3/1.4)
    -XX:PermSize 设置持久代(perm gen)初始值 物理内存的1/64
    -XX:MaxPermSize 设置持久代最大值 物理内存的1/4
    -Xss 每个线程的堆栈大小 JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右 一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。(校长) 和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:”” -Xss is translated in a VM flag named ThreadStackSize” 一般设置这个值就可以了。
    -XX:NewRatio 年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代) -XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。
    -XX:SurvivorRatio Eden区与Survivor区的大小比值 设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10
    -XX:LargePageSizeInBytes 内存页的大小不可设置过大,会影响Perm的大小 =128m
    -XX:+UseFastAccessorMethods 原始类型的快速优化
    -XX:+DisableExplicitGC 关闭System.gc() 这个参数需要严格的测试
    -XX:MaxTenuringThreshold 垃圾最大年龄 如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代. 对于年老代比较多的应用,可以提高效率.如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活 时间,增加在年轻代即被回收的概率 该参数只有在串行GC时才有效.
    -XX:+AggressiveOpts 加快编译
    -XX:+UseBiasedLocking 锁机制的性能改善
    -Xnoclassgc 禁用垃圾回收
    -XX:SoftRefLRUPolicyMSPerMB 每兆堆空闲空间中SoftReference的存活时间 1s softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap
    -XX:PretenureSizeThreshold 对象超过多大是直接在旧生代分配 0 单位字节 新生代采用Parallel Scavenge GC时无效 另一种直接在旧生代分配的情况是大的数组对象,且数组中无外部引用对象.
    -XX:TLABWasteTargetPercent TLAB占eden区的百分比 1%
    -XX:+CollectGen0First FullGC时是否先YGC false

    参考:这是一篇优雅的Springboot2.0使用手册

    展开全文
  • springboot jvm参数

    2021-06-23 14:59:25
    转载自: SpringBoot JVM参数调优 各种参数 参数名称 含义 默认值 说明 -Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制...
  • Springboot 项目JVM优化

    千次阅读 2019-08-05 15:16:58
    @SpringBootApplication注解自动获取应用的配置信息,会给应用带来一些副作用。由自动配置( auto-configuration )和 组件扫描 ( component scanning )组成,这跟使用 @Configuration、@EnableAutoConfiguration ...
  • SpringBoot项目配置Tomcat和JVM参数

    千次阅读 2020-07-05 20:40:08
    SpringBoot项目配置Tomcat和JVM参数 设置Tomcat端口号和连接数等 使用application.properties配置文件有一些参数无法设置,所以推荐创建一个类文件来配置,如下: import org.apache.catalina.connector....
  • 这个根据服务器的内存大小,来设置堆参数。 -Xms :设置Java堆栈的初始化大小 -Xmx :设置最大的java堆大小 实例参数-XX:+PrintGCDetails -Xmx32M -Xms1M
  • 点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]项目调优作为一名工程师,项目调优这事,是必须得熟练掌握的事情。在SpringBoot项目中,调优主要通过配置文件和配置JVM的...
  • 项目用springboot写的,以往启动都没有设置JVM参数,都是默认的。 今天遇到频繁FGC的情况,导致服务器CPU占用超级高,而且FGC并不能有效的回收对象内存。 1.ps查询对应进程: [root@10-9-166-14 server]# ps aux|...
  • 我们在使用springboot开发Web项目时,大多时候采用的是内置Tomcat(当然也可以配置支持内置的jetty),内置Tomcat有什么好处呢?1、方便微服务部署,减少繁杂的配置2、方便项目启动,不需要单独下载web容器,如...
  • springboot全局配置参数

    千次阅读 2019-04-16 09:41:41
    banner.charset=UTF-8 # Banner file encoding. banner.location=classpath:banner.txt # Banner file location. banner.image.location=classpath:banner.gif # Banner image file location (jpg/png can also be u...
  • 8年开发架构师浅析SpringBootJVM的内存占用与Docker-spring.io JVM可能是一个复杂的野兽。值得庆幸的是,大部分复杂性都在幕后,我们作为应用程序开发人员和部署人员通常不必过于担心。随着基于容器的部署...
  • SpringBoot(2.2.4.RELEASE) 的 SaaS型微服务脚手架,具备用户管理、资源权限管理、网关统一鉴权、Xss防跨站攻击、自动代码生成、多存储系统、分布式事务、分布式定时任务等多个模块,支持多业务系统并行...
  • SpringBoot jar包启动设置JVM参数

    万次阅读 2019-06-16 20:17:14
    配置初始化堆和最大堆的大小: java -Xms1024m -Xmx1024m -jar app.jar & 设置jvm参数 建议初始化堆的大小和最大堆的大小设置一致,减少GC。
  • tomcat配置JVM参数的三种情况

    千次阅读 2018-04-15 14:15:19
    其实网上相关文章很多,这里只是在研究tomcat自启动时看了下service.bat,觉得在配置jvm参数上可以改写下这个文件即可,但时间原因,未经测试,胆小勿进 先列举下网上的: 环境:Tomcat8.0,jdk8 第一种情况是...
  • 转载:https://blog.csdn.net/l848168/article/details/83379800
  • Springboot Docker GC参数调优配置 Dockerfile 配置 FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE ADD ${JAR_FILE} app.jar ENV JAVA_OPTS=" -server -XX:+UseG1GC -XX:GCTimeRatio=99 -XX:...
  • springboot tomcat 最大连接数默认是10000 最大并发数默认是200 如何手动修改:修改application.yml配置文件 server: tomcat: uri-encoding: UTF-8 max-threads: 1000 max-connections: 20000 jvm堆栈...
  • springboot配置优先级

    2019-06-13 20:38:40
    springboot配置优先级 (1) 命令行参数 (2) java:comp/env里的JNDI属性 (3) JVM系统属性 (4) 操作系统环境变量 (5) 随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random. long}) (6) ...
  • ## 10秒入门 springboot jar包启动及JVM参数设置 java -Xms512m -Xmx1024m -jar test.jar
  • SpringBoot笔记:SpringBoot启动参数配置

    千次阅读 2021-01-23 12:52:47
    文章目录目的测试代码配置文件配置获取自定义参数项目打包发布修改启动配置方式一:系统变量方式二:命令行参数springboot启动参数解释 目的 1、熟悉springboot多环境配置 2、熟悉springboot使用jar包启动时候的参数...
  • 说明 SpringBoot项目可以直接打包成jar,在命令行使用java -jar demo.jar方式启动,使用这种方式启动时可以再命令行中修改启动参数。 在Intellij IDEA开发环境中启动...SpringBoot项目属性配置加载顺序 顺序 ...
  • SpringBoot项目中,调优主要通过配置文件和配置JVM参数的方式进行。 修改配置文件 关于修改配置文件application.properties。 SpringBoot项目详细的配置文件修改文档 https://docs.spring.io/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,034
精华内容 6,013
关键字:

springboot配置jvm参数

spring 订阅