主要了列了下CMS相关的配置项,和配置项相关含义,具体CMS收集器工作机制,可以参考下其他资料;GC策略的选择需要根据具体的场景去定制,这里只是抛砖引玉
- 整体配置(默认实例规格是8c16g,线程数、内存大小需要根据实例规格去设置)
-Xmn1024m -XX:+UseConcMarkSweepGC -XX:ParallelCMSThreads=4 -XX:ParallelGCThreads=8 -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=3 -XX:+CMSClassUnloadingEnabled
- 配置项详解
UseConcMarkSweepGC: 启用CMS收集器
CMSParallelRemarkEnabled:开启并行重新标记
ParallelCMSThreads: 老年代并行收集线程数(默认 ParallelCMSThreads = (ParallelGCThreads + 3) / 4)
ParallelGCThreads:年轻代并行收集线程数(ParallelGCThreads = (ncpus <= 8) ? ncpus : 3 + ((ncpus * 5) / 8))
CMSInitiatingOccupancyFraction:老年代触发FullGC的内存使用率
UseCMSInitiatingOccupancyOnly:始终使用设定的阈值触发CMS收集
UseCMSCompactAtFullCollection:触发CMSFullGC后执行碎片整理
CMSFullGCsBeforeCompaction:设置执行n次FullGC后触发碎片整理
CMSClassUnloadingEnabled:开启CMS回收Pmer区
(ps:jdk7及以下ParallelCMSThreads > ParallelGCThreads 会导致jvm崩溃 https://bugs.openjdk.java.net/browse/JDK-8020236)
(ps:jvm内存设置
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
-Xmx3550m:设置JVM最大可用内存为3550M。
-Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
)