总结两套JVM模版配置

大白话:

        1.秒杀场景,Eden会设置的比较大;

        2.FullGC是代价最高的GC,频率越低越好。

大白话: 

        一般情况下,设置JVM堆内存为物理机内存的一半,最大不超过3/4;

        -Xmn3072M - 设置新生代的内存大小,如果不是秒杀系统,一般可以调整为1G或2G;

        -Xss1M - 设置单个线程栈大小,一般默认512~1024kb,单个线程栈大小跟操作系统和JDK版本都有关系,设置1M、2M。

        -XX:PermSize=256M - 设置永久代初始内存大小,永久代大小的设置,跟你是什么应用(比如秒杀系统)没有多大关系,因为永久代是装载类文件的,一般设置256/512M就可以;

        -XX:MaxPermSize=256M - 设置永久代最大内存大小;

        -XX:+UseParNewGC - 新生代启用ParNew垃圾收集器;

        -XX:+UseConcMarkSweepGC - 老年代启用CMS垃圾收集器;

        -XX:CMSInitiatingOccupancyFaction=92  -老年代触发FullGC的阈值;

        -XX:+UseCMSCompactAtFullCollection - 众所周知CMS垃圾收集会存在碎片化问题,该参数作用让FullGC之后做压缩整理(减少碎片);

        -XX:CMSFullGCsBeforeCompaction=0 - 多少次FullGC之后压缩一次,默认是0,代表每次FullGC后都会压缩一次,如果设置为2,则表示2次FullGC后,才会进行一次压缩整理;

       -XX:+CMSParallelInitialMarkEnabled - 启动并发标记,在初始标记阶段,会STW,导致服务中断,这个时候怎么办呢,一种方式是将初始标记阶段变为多线程,减少初始标记阶段停顿时间;

      -XX:+CMSScavengeBeforeRemark - 在重新标记阶段,会STW,导致服务中断,这个时候,在执行重新标记前,先执行一次YGC,因为重新标记主要管的是新创建的对象(新生代),先执行一次YGC,新生代中的垃圾对象都会被提前清除掉,这样再扫描对象,对象就会少很多,从而降低STW停顿时间。

正常情况下,还可以设置一些其他参数,比如日志输出等等。

大白话:

        -Xloggc:/home/shared/log/gc-server.log - 保存gc日志;

        -XX:ParallelGCThread=2 - GC并发线程数量,一般默认8,如果对垃圾回收要去不高,可以降低线程数量;

        -XX:MetaspaceSize=64m

        -XX:MaxMetaspaceSize=128M - 元数据空间不能太大,太大会把整个系统内存占满,一般需要做下限制,设置64/128/256都是可以的;

        -XX:UseFastAccessorMethods - 开关,访问Java类的时候,可以通过快速访问器访问Java方法,简单理解就是不通过get/set方法去访问,get/set方法太多会影响执行效率,这个时候,可以不通过get/set方法访问,可以直接去访问字段,不过在JDK11后被取消了,所以这个参数不是特别重要;

        -XX:+PrintGCDetails - 打印GC的详细信息;

        -XX:+PrintGCApplicationStoppedTime - 打印GC服务停止时间;

        -XX:+PrintGCDateStamps - 打印GC时间戳;

        -XX:+PrintHeapAtGC - 在进行GC的前后打印出堆的信息;

        -XX:+UseGCLogFileRotation - 开启滚动生成日志;

       -XX:+NumberOfGCLogFiles=10 - 滚动GC日志文件数,默认0不滚动;

        -XX:GCLogFileSize=50M - GC文件滚动大小,需开启UseGCLogFileRotation;

        -XX:HeapDumpOnOutMemoryError - 发生OOM时,dumpJVM堆栈信息;

        -XX:HeapDumpPath=/usr/local/oom - dump的堆栈信息保存路径;

相关推荐

  1. <span style='color:red;'>JVM</span><span style='color:red;'>总结</span>

    JVM总结

    2023-12-22 13:26:02      30 阅读
  2. JVM总结

    2023-12-22 13:26:02       32 阅读
  3. <span style='color:red;'>JVM</span><span style='color:red;'>总结</span>

    JVM总结

    2023-12-22 13:26:02      33 阅读
  4. jvm基础知识总结

    2023-12-22 13:26:02       55 阅读
  5. JVM知识点总结

    2023-12-22 13:26:02       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-22 13:26:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-22 13:26:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-22 13:26:02       82 阅读
  4. Python语言-面向对象

    2023-12-22 13:26:02       91 阅读

热门阅读

  1. js获取年月日的格式

    2023-12-22 13:26:02       49 阅读
  2. Flink系列之:Elasticsearch SQL 连接器

    2023-12-22 13:26:02       52 阅读
  3. git如何修改提交代码时的名字和邮箱?

    2023-12-22 13:26:02       63 阅读
  4. 华为常用命令大全

    2023-12-22 13:26:02       53 阅读
  5. 汽车动力电池

    2023-12-22 13:26:02       56 阅读
  6. 每日一道算法题 14(2023-12-22)

    2023-12-22 13:26:02       46 阅读
  7. linux 命令

    2023-12-22 13:26:02       61 阅读
  8. linux中数据库备份

    2023-12-22 13:26:02       57 阅读