zoukankan      html  css  js  c++  java
  • 高并发场景下的一种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左右。

  • 相关阅读:
    九九乘法表
    User-Agent的获取方法
    web前端【第一篇】HTML基础一(标签)
    SQLAlchemy的简单使用
    MongoDB的简单使用
    redis简单使用
    MySQL数据库学习【第十二篇】pymysql模块
    MySQL数据库学习【第十一篇】IDE工具介绍及数据备份
    MySQL数据库学习【第十篇】(视图、触发器、事物)
    MySQL数据库学习【补充】mysql老是停止运行该怎么解决
  • 原文地址:https://www.cnblogs.com/LionheartCGJ/p/13293863.html
Copyright © 2011-2022 走看看