zoukankan      html  css  js  c++  java
  • Java-技术专区-JVM调优常用参数

    1.调优的目的

    • 1.控制GC的行为:
      GC是一个后台处理,但是它也是会消耗系统性能的,因此经常会根据系统运行的程序的特性来更改GC行为。

    • 2.控制JVM堆栈大小:
      JVM在内存分配上不需要你修改,但是当你的程序新生代对象在某个时间段产生的比较多的时候,就需要控制新生代的堆大小,同时,还要需要控制总的JVM大小避免内存溢出。

    • 3.控制JVM线程的内存分配:
      如果是多线程程序,产生线程和线程运行所消耗的内存也是可以控制的,需要通过一定时间的观测后,配置最优结果。

    2、GC 事件分类

           根据垃圾收集回收的区域不同,垃圾收集主要分为:

    • 2.1 Young GC(又称Minor GC、YGC)
      新生代内存的垃圾收集事件称为 Young GC(又称 Minor GC),当 JVM 无法为新对象分配在新生代内存空间时总会触发 Young GC。

      比如 Eden 区占满时,新对象分配频率越高,Young GC 的频率就越高。

      Young GC 每次都会引起全线停顿(Stop-The-World),暂停所有的应用线程,停顿时间相对老年代 GC 造成的停顿,几乎可以忽略不计。

    • 2.2 Old GC(又称Major GC)
      只清理老年代空间的 GC 事件,只有 CMS 的并发收集是这个模式。

    • 2.3 Full GC
      清理整个堆的GC事件,包括新生代、老年代、元空间等 。

    • 2.4 Mixed GC
      清理整个新生代以及部分老年代的 GC,只有 G1 有这个模式。

    3、常用参数总结

    3.1 堆设置

    -Xms:初始堆大小
    
    -Xmx:最大堆大小
    
    -Xmn:新生代大小
    -Xss:线程堆栈大小,默认为1M
    -XX:NewRatio=n:设置新生代和年老代的比值,默认为1:2。如为3,表示新生代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。默认为8:2
    如:6,表示Eden:Survivor=6:4,一个Survivor区占整个年轻代的2/10 -XX:MaxPermSize=n:设置持久代大小

    3.2 收集器设置

    -XX:+UseParallelGC:设置并行收集器
    -XX:+UseParalledlOldGC:设置并行年老代收集器
    
    -XX:+UseG1GC:使用G1做为GC收集器
    -XX:+UseConcMarkSweepGC:设置并发收集器CMS
    

    3.3 垃圾回收统计信息

    -XX:+PrintGC:输出形式:
    [GC 118250K->113543K(130112K), 0.0094143 secs]
    [Full GC 121376K->10414K(130112K), 0.0650971 secs]
    -XX:+PrintGCDetails:输出形式:
    [GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]
    [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
    
    -XX:+PrintGCTimeStamps:打印GC停顿耗时
    -XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间.
    -XX:+PrintHeapAtGC:打印GC前后的详细堆栈信息
    -Xloggc:filename:把相关日志信息记录到文件以便分析.
    

    3.4 并行收集器参数设置

    -XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。STW期间,并行GC线程数
    
    -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
    
    -XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
    

    3.5 并发收集器设置

    -XX:+CMSIncrementalMode:设置为增量模式。适用于单CPU情况。
    
    -XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数
    

    4、实例

    A/B-Test jvm调试,默认情况下,系统压测800qps,优化后能达到1000

    优化参数:

    -XX:NewRatio=1:设置新生代和年老代的比值为2:1
    -Xss:线程堆栈大小,默认为1M,调整为512K
    -XX:+UseG1GC:使用G1做为GC收集器
    -XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间为20ms

     
     
    JAVA
     
  • 相关阅读:
    准备 FRM 考试——方法、工具与教训
    930. 和相同的二元子数组 前缀和
    1906. 查询差绝对值的最小值 前缀和
    剑指 Offer 37. 序列化二叉树 二叉树 字符串
    815. 公交路线 BFS
    518. 零钱兑换 II dp 完全背包
    1049. 最后一块石头的重量 II dp
    5779. 装包裹的最小浪费空间 二分
    5778. 使二进制字符串字符交替的最少反转次数 字符串 滑动窗口
    474. 一和零 dp
  • 原文地址:https://www.cnblogs.com/liboware/p/12973227.html
Copyright © 2011-2022 走看看