-
2021-12-29 20:57:31
1、-Xms 512m:初始化堆内存大小为 512m。
2、-Xmx 512m:堆最大内存为 512m。
3、-XX:NewRatio=4:设置老年代与年轻内存比例为 4:1。
4、-XX:SurvivorRatio=8:设置新生代 Eden 和 Survivor 比例为 8:1。
5、–XX:+UseParNewGC:指定使用 ParNew + Serial Old 垃圾回收器组合。
6、-XX:+UseParallelOldGC:指定使用 ParNew + ParNew Old 垃圾回收器组合。
7、-XX:+UseConcMarkSweepGC:指定使用 CMS + Serial Old 垃圾回收器组合。
8、-XX:+PrintGC:开启打印 GC 信息。
9、-XX:+PrintGCDetails:开启打印 GC 详细信息。
更多相关内容 -
JVM调优参数
2021-12-02 10:51:54JVM调优参数配置方式内存参数合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表...JVM调优参数
一、配置方式
-
java [options] MainClass [arguments]
-
options - JVM启动参数。 配置多个参数的时候,参数之间使用空格分隔。
-
参数命名: 常见为 -参数名
-
参数赋值: 常见为 -参数名=参数值 | -参数名:参数值
二、内存参数
-
-Xms:初始堆大小,JVM启动的时候,给定堆空间大小。
-Xms3550m,设置JVM初始内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -
-Xmx:最大堆大小,JVM运行过程中,如果初始堆空间不足的时候,最大可以扩展到多少。
-Xmx3550m:设置JVM最大可用内存为3550M。 -
-Xmn:设置年轻代大小。
整个堆大小 = 年轻代大小 + 老年代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xmn2g:设置年轻代大小为2G。 -
-Xss: 设置每个线程的Java栈大小。
JDK5.0以后每个线程Java栈大小为1M,以前每个线程堆栈大小为256K。根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
-Xss128k:设置每个线程的堆栈大小为128k。 -
-XX:NewSize=n:设置年轻代大小。
-
-XX:NewRatio=n:设置年轻代(包括Eden和两个Survivor区)与年老代的比值。
比如设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 -
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。
注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5。 -
-XX:MaxPermSize=n:设置永久代大小
-XX:MaxPermSize=16m:设置持久代大小为16m。 -
-XX:MaxTenuringThreshold=n:设置垃圾最大年龄。
如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。
三、回收器参数
JVM给了三种选择:串行收集器、并行收集器、并发收集器。串行收集器只适用于小数据量的情况。
-
-XX:+UseSerialGC: 设置串行收集器。
-
-XX:+UseParallelGC: 设置并行收集器,表示年轻代使用并行收集器。
-
-XX:+UseParNewGC: 设置年轻代为并行收集。可与CMS收集同时使用。JDK5.0以上,JVM会根据系统配置自行设置,所以无需再设置此值。
-
-XX:+UseParallelOldGC: 设置并行年老代收集器,JDK6.0支持对年老代并行收集。
-
-XX:+UseConcMarkSweepGC: 设置年老代并发收集器CMS。
-
-XX:+UseG1GC: 设置G1收集器
-
-XX:ParallelGCThreads=n: 设置并行收集器收集时最大线程数使用的CPU数。并行收集线程数。
-
-XX:MaxGCPauseMillis=n: 设置并行收集最大暂停时间,单位毫秒。可以减少STW时间。
-
-XX:GCTimeRatio=n: 设置垃圾回收时间占程序运行时间的百分比。公式为 1/(1+n) 并发收集器设置
-
-XX:+CMSIncrementalMode: 设置为增量模式。适用于单CPU情况。
-
-XX:+UseAdaptiveSizePolicy: 设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。
-
-XX:CMSFullGCsBeforeCompaction=n: 由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。
-
-XX:+UseCMSCompactAtFullCollection: 打开对年老代的压缩。可能会影响性能,但是可以消除碎片。
四、辅助参数
JVM提供了大量命令行参数,打印信息,供调试使用。商业项目上线的时候,不允许使用。一定使用loggc。主要有以下一些:
-
-XX:+PrintGC
输出形式:[GC 118250K->113543K(130112K), 0.0094143 secs]
[Full GC 121376K->10414K(130112K), 0.0650971 secs] -
-XX:+PrintGCDetails
输出形式:[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]
[GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs] -
-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可与上面两个混合使用
输出形式:11.851: [GC 98328K->93620K(130112K), 0.0082960 secs] -
-XX:+PrintGCApplicationConcurrentTime: 打印每次垃圾回收前,程序未中断的执行时间。可与上面混合使用
输出形式:Application time: 0.5291524 seconds -
-XX:+PrintGCApplicationStoppedTime: 打印垃圾回收期间程序暂停的时间。可与上面混合使用
输出形式:Total time for which application threads were stopped: 0.0468229 seconds -
-XX:PrintHeapAtGC: 打印GC前后的详细堆栈信息
-
-Xloggc:filename: 与上面几个配合使用,把相关日志信息记录到文件以便分析。
五、调优建议
5.1 年轻代大小选择
响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达老年代的对象。
吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。
5.2 老年代大小选择
-
响应时间优先的应用: 老年代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数。如果堆设置小了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时间。最优化的方案,一般需要参考以下数据获得:
- 并发垃圾收集信息
- 持久代并发收集次数
- 传统GC信息
- 花在年轻代和年老代回收上的时间比例
减少年轻代和老年代花费的时间,一般会提高应用的效率
-
吞吐量优先的应用: 一般吞吐量优先的应用都有一个很大的年轻代和一个较小的老年代。原因是,这样可以尽可能回收掉大部分短期对象,减少中期的对象,而老年代尽存放长期存活对象。
5.3 较小堆引起的碎片问题
因为老年代的并发收集器使用标记、清除算法,所以不会对堆进行压缩。当收集器回收时,他会把相邻的空间进行合并,这样可以分配给较大的对象。但是,当堆空间较小时,运行一段时间以后,就会出现“碎片”,如果并发收集器找不到足够的空间,那么并发收集器将会停止,然后使用传统的标记、清除方式进行回收。如果出现“碎片”,可能需要进行如下配置:
- -XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩。
- -XX:CMSFullGCsBeforeCompaction=0:上面配置开启的情况下,这里设置多少次Full GC后,对老年代进行压缩
-
-
JVM调优常用参数
2021-07-09 23:37:12JVM 调优常用参数总结 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xmx1G -Xms1G -Xmn500M Heap ====================================== jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机...JVM 调优常用参数总结
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xmx1G -Xms1G -Xmn500M Heap ====================================== jps JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。 命令格式 jps [options] [hostid] option参数 -l : 输出主类全名或jar路径 -q : 只输出LVMID -m : 输出JVM启动时传递给main()的参数 -v : 输出JVM启动时显示指定的JVM参数 =================================== jstat jstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。 命令格式 jstat [option] LVMID [interval] [count] 参数 [option] : 操作参数 LVMID : 本地虚拟机进程ID [interval] : 连续输出的时间间隔 [count] : 连续输出的次数 ======================================= jmap jmap(JVM Memory Map)命令用于生成heap dump文件 命令格式 jmap [option] LVMID option参数 dump : 生成堆转储快照 finalizerinfo : 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象 heap : 显示Java堆详细信息 histo : 显示堆中对象的统计信息 permstat : to print permanent generation statistics F : 当-dump没有响应时,强制生成dump快照 ======================================= jstack jstack用于生成java虚拟机当前时刻的线程快照 命令格式 jstack [option] LVMID option参数 -F : 当正常输出请求不被响应时,强制输出线程堆栈 -l : 除堆栈外,显示关于锁的附加信息 -m : 如果调用到本地方法的话,可以显示C/C++的堆栈 ======================================== jinfo jinfo(JVM Configuration info)这个命令作用是实时查看和调整虚拟机运行参数。 之前的jps -v口令只能查看到显示指定的参数,如果想要查看未被显示指定的参数的值就要使用jinfo口令 命令格式 jinfo [option] [args] LVMID option参数 -flag : 输出指定args参数的值 -flags : 不需要args参数,输出所有JVM参数的值 -sysprops : 输出系统属性,等同于System.getProperties() 示例 $ jinfo -flag 11494 -XX:CMSInitiatingOccupancyFraction=80
-
JVM调优常用的调优参数
2021-09-19 16:05:06一、堆内存参数配置 -Xms10g :JVM启动时申请的初始堆内存值 -Xmx20G :JVM可申请的最大Heap值 -Xmn3g : 新生代大小,一般设置为堆空间的1/3 1/4左右,新生代大则老年代小 -Xss :Java每个线程的Stack大小 -XX:...一、堆内存参数配置
-Xms10g :JVM启动时申请的初始堆内存值 -Xmx20G :JVM可申请的最大Heap值 -Xmn3g : 新生代大小,一般设置为堆空间的1/3 1/4左右,新生代大则老年代小 -Xss :Java每个线程的Stack大小 -XX:PermSize :持久代(方法区)的初始内存大小 -XX:MaxPermSize : 持久代(方法区)的最大内存大小 -XX:SurvivorRatio : 设置新生代eden空间和from/to空间的比例关系,关系(eden/from=eden/to) -XX:NewRatio : 设置新生代和老年代的比例老年代/新生代
二、调试跟踪参数配置
-XX:+PrintGC :打印GC日志 -XX:+PrintGCDetailsGC :时的详细堆信息 -XX:+PrintHeapAtGC :打印GC前后的堆信息 -XX:+PrintGCTimeStamps :输出GC发生时间,输出的时间为虚拟机启动的偏移量 -XX:+PrintGCApplicationConcurrentTime :输出应用程序执行时间 -XX:+PrintGCApplicationStoppedTime :输出应用程序由于GC产生停顿的时间 -XX:+PrintRefrenceGC :输出软引用、弱引用、虚引用和Finalize队列 -XX:+HeapDumpOnOutOfMemoryError :产生OOM时可以在内存溢出时导出整个堆信息 -XX:HeapDumpPath :导出堆文件存放路径 -XX:+TraceClassLoading :跟踪类加载信息 -XX:+TraceClassUnloading :跟:踪类卸载信息 -XX:PrintClassHitogram :查看系统中的类的分布情况(占用空间最多、实例数量空间大小) -XX:+PrintVMOptions :打印虚拟机接收到的命令行显示参数 -XX:+PrintCommandLineFlags :打印虚拟机的显式和隐式参数 -XX:+PrintFlagsFinal :打印虚拟机的所有系统参数
三、GC参数设置
3.1 串行收集器相关的参数
-XX:+UseSerialGC :新生代、老年代使用串行收集器 -XX:SurvivorRatio :设置eden区和survivor区大小的比例 -XX:PretenureSizeThreshold,:当对象大小超过此值时,直接分配到老年代 -XX:MaxTenuringThreshold :设置对象进入老年代的最大年龄
3.2 并行相关的参数
-XX:+UseParNewGC :新生代使用并行收集器 -XX:+UseParallelOldGC :老年代使用并行回收收集器 -XX:+ParallelGCThreads :设置垃圾回收线程数,一般最好与CPU数量相当,默认情况下,当CPU数量小于8个时,ParallelGCThreads的值相当于CPU数量,当CPU数量大于8个时,ParallelGCThreads的值等于3+((5*CPU_COUNT)/8 -XX:MaxGCPauseMillis :设置最大垃圾收集停顿时间 -XX:GCTimeRatio :设置吞吐量大小,它的值是一个0~100之间的整数,假设值为n,那么系统将花费不超过1/(1+n)的时间用于垃圾收集 -XX:+UseAdaptiveSizePolicy :打开自适应GC策略,JVM对新生代的大小、eden和survivior的比例、晋升老年代对象年龄等参数自动调整
3.3 CMS回收器相关的参数
-XX:+UseConcMarkSweepGC :启用CMS -XX:ParallelCMSThreads :设置CMS线程数量 -XX:CMSInitiatingOccupancyFraction :默认68当老年代的空间超过68%时会执行一次CMS回收 -XX:UseCMSCompactAtFullCollection :设置CMS结束后是否需要进行一次内存空间整理 -XX:CMSFullGCsBeforeCompaction :进行多少次CMS后进行内存空间压缩 -XX:+CMSClassUnloadingEnabled :允许对类元数据区进行回收 -XX:CMSInitiatingPermOccupancyFraction :当永久区占用率达到此值时进行CMS回收(须激活CMSClassUnloadingEnabled) -XX:UseCMSInitiatingOccupancyOnly:只要达到阈值时进行CMS回收
3.4 G1 回收器相关的参数
-XX:+UseG1GC :使用G1 -XX:MaxGCPauseMillis :最大垃圾收集停顿时间 -XX:GCPauseIntervalMillis :最大停顿间隔时间
-
马士兵jvm调优笔记.docx
2019-06-20 09:56:00一.java内存结构 2 二 垃圾收集算法: 3 三 JVM参数 4 四 JVM的垃圾回收集器 7 五 常用参数设置 7 -
常用的 jvm 调优的参数都有哪些?
2021-09-29 19:05:59表示设置JVM启动内存的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置JVM启动内存的最大值为20M,必须以M为单位。将-Xmx和-Xms设置为一样可以避免JVM内存自动扩展。大 的项目-Xmx和-Xms一般都要设置到10G... -
日常开发中常用的JVM调优参数有哪些呢?
2022-05-03 20:10:54JVM常用的调优参数说明 -
Jvm调优和SpringBoot项目优化的详细教程
2020-09-07 17:26:13主要介绍了Jvm调优和SpringBoot项目优化,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 -
【JVM】JVM调优常见参数详解
2022-04-27 20:57:57-Xms2g:JVM启动初始化堆大小为2g,Xms的默认是物理内存的1/64但小于1G。 -Xmx2g:JVM最大的堆大小为2g,Xmx默认是物理内存的1/4但小于1G;...-Xss128K:每个线程的堆栈大小为128K -XX:PermSize=128 -
手把手教你设置JVM调优参数
2020-11-15 10:41:35关注“Java后端技术全栈”回复“000”获取大量电子书首先,还是一张思维导图,看看本文主要内容:今天来熟悉一下,关于JVM调优常用的一些参数。X或者XX开头的都是非转标准化参数意思就是... -
JVM调优参数详解
2022-03-22 10:05:35JVM调优建议: 打印GC日志(GC日志的讲解,可以参考我的xmind给出的笔记,这里就不做过多说明了) 分析GC日志得出与性能相关的问题 调优JVM参数提升性能 此过程在实际生产中是反复调试的过程,通过不断地调整... -
JVM 调优 1:“精通 JVM 调优,有过 JVM 调优经验”简历敢写吗?薪资涨 5k 的技巧
2021-03-15 13:54:05现在除了一些有工作和开发经验的大神,基本很少有人在简历上敢写“精通 JVM 调优,有过 JVM 调优经验”,因为应聘者如果写这句话就意味着你的面试将会是很“难过”的,面试官会变着法的问你如何进行 JVM 系列调优,... -
JVM常用调优参数 ——JVM篇
2022-03-18 22:18:15JVM常用性能调优参数详解 在学习完整个JVM内容后,其实目标不仅是学习了解整个JVM的基础知识,而是为了进行JVM性能调优做准备,所以以下的内容就是来说说JVM性能调优的知识。 一、性能调优 性能调优包含多个... -
java jvm调优在哪里设置_JVM调优(一)参数设置
2022-01-06 14:12:281.2 GC优化的两个目的 减少进入老年代的对象 除了可以在JDK 7及更高版本中使用的G1收集器以外,其他分代GC都是由Oracle JVM提供的。关于分代GC,就是对象在Eden区被创建,随后被转移到Survivor区,在此之后剩余的... -
常用的 JVM 调优的参数都有哪些?
2021-09-15 10:08:12本文为joshua317原创文章,转载请注明:转载自joshua317博客常用的 JVM 调优的参数都有哪些? - joshua317的博客 XX比X的稳定性更差,并且版本更新不会进行通知和说明。 -Xms s为strating,表示堆内存起始大小 -... -
jvm调优
2021-11-18 11:40:35一、jvm内存调优 主要的目的是减小GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC由于须要对整个堆进行回收,因此比较慢,所以应该尽量减小Full GC的次数。数组 2.... -
Java JVM调优篇
2021-09-01 22:17:321.1 JVM 类加载的五个阶段 1.1.1 加载 加载时类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口。注意这里不一定非得从一个... -
tomcat调优以及jvm参数调优
2022-03-10 11:50:45tomcat jvm 调优 -
JVM常用调优配置参数
2020-12-30 18:12:18开发过程中,通常会将-Xms 与-Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源 -Xms:表示java虚拟机堆区内存初始内存分配的大小,通常为操作... -
jvm调优步骤
2022-04-04 15:19:44第3步:确定JVM调优参数(根据历史JVM参数来调整); 第4步:调优一台服务器,对比观察调优前后的差异; 第5步:不断的分析和调整,直到找到合适的JVM参数配置; 第6步:找到最合适的参数,将这些参数应用到所有... -
JVM调优.pdf
2017-08-10 13:30:40JVM调优 调优参数 调优方法 , 调优手段 等. -
JVM参数及调优
2022-05-18 09:01:10JVM控制参数、JVM调试命令、JVM调试工具、JVM调优案例 -
【JVM实战】JVM参数调优
2020-03-30 14:45:24文章目录JVM参数调优一、调优基本概念二、常用JVM参数三、GC调优思路 JVM参数调优 一、调优基本概念 在调整性能时,JM有三个组件 堆大小调整 垃圾收集器调整 JIT编译器调整 大多数调优选项都与调整堆大小和选择的... -
JVM参数调优
2022-04-05 14:56:06虽然有了这种程度的自动化(或者说有这么多自动化),但是JVM仍然提供了足够多的外部监控和手动调优工具(允许命令行参数可以在JVM启动时传入到JVM中)。在有错误或低性能的情况下,JVM必须能够让调试,JVM提供了几... -
面试之JVM调优篇
2022-07-08 23:33:34面试之JVM调优篇 -
关于JVM调优的工具及JVM 常见调优参数
2020-06-22 16:37:30六个命令行排查工具 我们一般使用 JDK 自带的 6 个命令行工具来排查JVM。它们分别是:jps、jstat、jinfo、jmap、jhat 和 jstack,它们都位于 JDK 的 bin 目录下,可以使用命令行工具直接运行。 jps(虚拟机进程状况... -
idea里Jvm调优
2021-08-28 21:52:59快速掌握jvm调优!!! -
JVM调优总结
2022-03-12 13:56:311、调优原则 JVM调优听起来很高大上,但是要认识到,JVM...即使不得不进行JVM调优,也绝对不能拍脑门就去调整参数,一定要全面监控,详细分析性能数据。 2、JVM调优的时机 不得不考虑进行JVM调优的是那些情况呢?