基于JDK8 配置通用的JVM参数

  • 背景描述:

 因发现公司的JVM参数配置的不合理,项目JVM参数配置不统一,并且CMS GC触发时间,是交由JVM动态调控的,造成遇到GC和JVM相关问题的时候,排查较为困难,于是基于JDK8整理出一套通用的JVM参数配置。

  • 新生代垃圾回收器是采用ParNew(标记复制算法)

  • 老年代的垃圾回收器是采用CMS(标记清除算法)

  • 备用老年代垃圾回收器(Concurrent Mode Failure)采用Serial Old(标记整理算法)

1.通用参数:

设置初始内存和最大内存为5120m(具体大小可根据项目自行调节),设置为统一,避免扩容造成的性能损失

-Xms5120m 

-Xmx5120m

设置新生代大小为1706m 推荐新生代大小:老年代大小比例为 1:2,新生代占整堆大小的1/3

-Xmn1706m

设置线程栈为512k

-Xss512k

设置元空间初始内存和最大内存为512m

-XX:MaxMetaspaceSize=512m 
-XX:MetaspaceSize=512m

指定CMS垃圾回收器作为老年代回收器

-XX:+UseConcMarkSweepGC

使用Parnew垃圾回收器作为新生代回收器

-XX:+UseParNewGC

关闭JVM自动调控的垃圾回收,不开启此参数,后续很多配置参数无意义

-XX:+UseCMSInitiatingOccupancyOnly

// FullGC之后开启压缩,配套使用CMSFullGCsBeforeCompaction的值作为FullGC几次之后 压缩一次,值为0的话就默认每次FullGC压缩一次,注意CMS GC不是Full GC,可自行百度CMS 的 foreground GC和 background GC的区别)

-XX:+UseCMSCompactAtFullCollection

-XX:CMSFullGCsBeforeCompaction=0

在老年代内存达到70%的时候,进行CMS垃圾回收

-XX:CMSInitiatingOccupancyFraction=70

CMS垃圾回收时卸载无用的class类

-XX:+CMSClassUnloadingEnabled

在做System.gc()时会做background模式CMS GC。主要因为用NIO/Netty框架的时候,会直接申请堆外内存,很多框架底层,为了释放mmap分配的空间,会调用System.gc()来回收

-XX:+ExplicitGCInvokesConcurrent

以下为打印GC日志和OOM时dump的参数

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=xxxx/heapdump.hprof

-XX:+PrintGC

-XX:+PrintGCDateStamps

-XX:+PrintGCDetails

-XX:+PrintGCTimeStamps

2.排查GC问题可选参数

在CMS remark之前做一次ygc

-XX:CMSScavengeBeforeRemark

并行处理Reference

-XX:+ParallelRefProcEnabled

排查GC时间过长的可选参数

-XX:+PrintStringTableStatistics

-XX:+PrintReferenceGC

-XX:+PrintHeapAtGC

-XX:+PrintGCApplicationStoppedTime

-XX:+PrintSafepointStatistics

-XX:PrintSafepointStatisticsCount=1


链接:http://events.jianshu.io/p/df8b7d64421e

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Development Kit (JDK)是Java开发工具包,而JVM参数是为Java虚拟机(JVM)配置的一组参数JDK8是Java 8版本的JDK,下面我将详细解释JDK8中常用的JVM参数配置。 1. -Xms和-Xmx:这是设置JVM初始化堆内存和最大堆内存的参数。-Xms设定初始堆大小,-Xmx设定最大堆大小。例如,-Xms512m表示初始堆大小为512MB,-Xmx1024m表示最大堆大小为1GB。 2. -Xss:这是设置线程栈大小的参数。默认值根据操作系统和JVM版本而定。可以根据应用程序的需求进行调整。例如,-Xss256k表示线程栈的大小为256KB。 3. -XX:MetaspaceSize和-XX:MaxMetaspaceSize:这是设置元空间(Metaspace)初始大小和最大大小的参数。元空间是Java 8引入的一种取代永久代(PermGen)的存储区域。例如,-XX:MetaspaceSize=128m表示元空间的初始大小为128MB,-XX:MaxMetaspaceSize=256m表示元空间的最大大小为256MB。 4. -XX:NewSize、-XX:MaxNewSize和-XX:SurvivorRatio:这些是控制新生代(Young Generation)内存大小以及Eden区、Survivor区的比例的参数。新生代是堆内存的一部分,存放新创建的对象。可以通过调整这些参数来优化垃圾回收性能。 5. -XX:+UseParallelGC和-XX:+UseConcMarkSweepGC:这些是选择垃圾回收器的参数。Parallel GC(并行垃圾回收器)和CMS(并发标记清除垃圾回收器)是JDK8默认的两种垃圾回收器。分别用于在不同场景下提供更好的垃圾回收性能。 这些只是JDK8中常用的JVM参数配置的一部分。根据实际需求,还有其他许多参数可以进行调整以达到最佳性能和稳定性。重要的是要了解这些参数,并根据应用程序的需求进行适当的配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值