• 高并发场景下的一种JVM GC优化配置【CMS】


    主要了列了下CMS相关的配置项,和配置项相关含义,具体CMS收集器工作机制,可以参考下其他资料;GC策略的选择需要根据具体的场景去定制,这里只是抛砖引玉

    1. 整体配置(默认实例规格是8c16g,线程数、内存大小需要根据实例规格去设置)
      -Xmn1024m -XX:+UseConcMarkSweepGC -XX:ParallelCMSThreads=4 -XX:ParallelGCThreads=8 -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=3 -XX:+CMSClassUnloadingEnabled
    2. 配置项详解

        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左右。

  • 相关阅读:
    解决首次在eclipse中使用maven构建hadoop等项目时报Missing artifact sun.jdk:tools:jar:1.5.0的问题
    分享eclipse自动生成java注释方法
    Android篇Styles和Themes常见用法可能疑点小结
    常用文件的MIME类型
    C#中如何将字符串转换byte[],同时如何将byte[]换成字符串
    TransactSQL语句进行导入导出[转]
    随机索引生成
    C#使用ZLIB对字符串进行压缩
    C#对XML文件的读操作
    SQL语句删除数据库重复记录的方法
  • 原文地址:https://www.cnblogs.com/LionheartCGJ/p/13293863.html
Copyright © 2020-2023  润新知