您的位置 首页 > 数码极客

jvm如何选择parallelgcthreads

一、调优原则

根据硬件、需求选择不同收集器进行组合, 最终目的是减少STW


可组合的收集器

二、用到的参数

-XX:+PrintGC

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

-Xloggc:filename

收集器设置

-XX:+UseSerialGC:设置串行收集器

-XX:+UseParallelGC:设置并行收集器

-XX:+UseParallelOldGC:老年代使用并行回收收集器

-XX:+UseParNewGC:在新生代使用并行收集器

-XX:+UseParalledlOldGC:设置并行老年代收集器

-XX:+UseConcMarkSweepGC:设置CMS并发收集器

-XX:+UseG1GC:设置G1收集器

-XX:ParallelGCThreads:设置用于垃圾回收的线程数

并行收集器设置

-XX:ParallelGCThreads:设置并行收集器收集时使用的CPU数。并行收集线程数。

-XX:MaxGCPauseMillis:设置并行收集最大暂停时间

-XX:GCTimeRatio:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

CMS收集器设置

-XX:+UseConcMarkSweepGC:设置CMS并发收集器

-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。

-XX:ParallelGCThreads:设置并发收集器新生代收集方式为并行收集时,使用的CPU数。并行收集线程数。

-XX:CMSFullGCsBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩

-XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收

-XX:UseCMSInitiatingOccupancyOnly:设置 CMS 收集器在老年代空间被使用多少后触发,默认为 68%

-XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况

-XX:ParallelCMSThreads:设定CMS的线程数量

-XX:CMSInitiatingOccupancyFraction=75:设置CMS收集器在老年代空间被使用多少后触发

-XX:+UseCMSCompactAtFullCollection:设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理,(PS

因为年老代的并发收集器使用标记,清除算法,所以不会对堆进行压缩.当收集器回收时,他会把相邻的空间进行合并,这样可以分配给较大的对象.但是,当堆空间较小时,运行一段时间以后,就会出现"碎片",如果并发收集器找不到足够的空间,那么并发收集器将会停止,然后使用传统的标记,清除方式进行回收.如果出现"碎片",可能需要进行如下配置:
-XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩.
-XX:CMSFullGCsBeforeCompaction=0:上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩

打开压缩 打开压缩后,多少次FullGC进行一次压缩
-XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0
打开只要到达阈值才进行回收 设置的阈值
-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80

)

G1收集器设置

-XX:+UseG1GC:使用G1收集器

-XX:ParallelGCThreads:指定GC工作的线程数量

-XX:G1HeapRegionSize:指定分区大小(1MB~32MB,且必须是2的幂),默认将整堆划分为2048个分区

-XX:GCTimeRatio:吞吐量大小,0-100的整数(默认9),值为n则系统将花费不超过1/(1+n)的时间用于垃圾收集

-XX:MaxGCPauseMillis:目标暂停时间(默认200ms)

-XX:G1NewSizePercent:新生代内存初始空间(默认整堆5%)

-XX:G1MaxNewSizePercent:新生代内存最大空间

-XX:TargetSurvivorRatio:Survivor填充容量(默认50%)

-XX:MaxTenuringThreshold:最大任期阈值(默认15)

-XX:InitiatingHeapOccupancyPercen:老年代占用空间超过正对比IHOP阈值(默认45%),超过则执行混合收集

-XX:G1HeapWastePercent:堆废物百分比(默认5%)

-XX:G1MixedGCCountTarget:参数混合周期的最大总次数(默认8)

三、调优

第一组:Serail+SerailOld

设置-XX:+UseSerialGC

Jar包设置:-Xms1024M -Xmx1024M -XX:+PrintGCDetails -XX:+UseSerialGC-XX:ParallelGCThreads=1 -XX:+PrintGCTimeStamps -Xloggc:.

平均响应时间和吞吐量

结论:serail为单线程串行,在单CPU下使用效率高,减少CPU切换线程造成的性能浪费

第二组:ParNew+SerailOld

设置-XX:+UseParNewGC

Jar设置-Xms1024M -Xmx1024M -XX:+PrintGCDetails -XX:+UseParNewGC -XX:ParallelGCThreads=3 -XX:+PrintGCTimeStamps -Xloggc:.

-XX:ParallelGCThreads=1时

-XX:ParallelGCThreads=3时


不同线程数,输出的日志

结论:明显3个线程比1个线程垃圾收集速度快(线程个数设置=cpu个数)

第三组:ParallelGC+ParallelOldGC

设置-XX:+UseParallelOldGC

Jar包设置-Xms256M -Xmx256M -XX:+PrintGCDetails -XX:+UseParallelOldGC -XX:ParallelGCThreads=3 -XX:+PrintGCTimeStamps -XX:MaxGCPauseMillis=100 -XX:GCTimeRatio=9

-XX:ParallelGCThreads=1时

-XX:ParallelGCThreads=3时


一个线程

结论:这种设置主要是在老年代垃圾收集时增加并行收集,加快收集速度,减少stw时间

第四组:ParNew+CMS+SerailOld


设置-XX:+UseConcMarkSweepGC

Jar包设置-Xms1024M -Xmx1024M -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=3 -XX:+PrintGCTimeStamps -XX:MaxGCPauseMillis=100 -XX:GCTimeRatio=9

平均响应时间和吞吐量

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“jvm如何选择parallelgcthreads”边界阅读