• JVM调参


    一、jmap -heap 命令结果分析(1.8和1.7会有区别)

    jmap -heap pid
    
    Attaching to process ID 3764, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.171-b11
    
    using thread-local object allocation.
    Parallel GC with 8 thread(s) //采用Parallel GC 
    
    Heap Configuration:
       MinHeapFreeRatio         = 0    //JVM最小空闲比率 可由-XX:MinHeapFreeRatio=<n>参数设置, jvm heap 在使用率小于 n 时 ,heap 进行收缩
       MaxHeapFreeRatio         = 100  //JVM最大空闲比率 可由-XX:MaxHeapFreeRatio=<n>参数设置, jvm heap 在使用率大于 n 时 ,heap 进行扩张 
       MaxHeapSize              = 2095054848 (1998.0MB) //JVM堆的最大大小 可由-XX:MaxHeapSize=<n>参数设置
       NewSize                  = 44040192 (42.0MB) //JVM新生代的默认大小 可由-XX:NewSize=<n>参数设置
       MaxNewSize               = 698351616 (666.0MB) //JVM新生代的最大大小 可由-XX:MaxNewSize=<n>参数设置
       OldSize                  = 88080384 (84.0MB) //JVM老生代的默认大小 可由-XX:OldSize=<n>参数设置 
       NewRatio                 = 2 //新生代:老生代(的大小)=1:2 可由-XX:NewRatio=<n>参数指定New Generation与Old Generation heap size的比例。
       SurvivorRatio            = 8 //survivor:eden = 1:8,即survivor space是新生代大小的1/(8+2)[因为有两个survivor区域] 可由-XX:SurvivorRatio=<n>参数设置
       MetaspaceSize            = 21807104 (20.796875MB) //元空间的默认大小,超过此值就会触发Full GC 可由-XX:MetaspaceSize=<n>参数设置
       CompressedClassSpaceSize = 1073741824 (1024.0MB) //类指针压缩空间的默认大小 可由-XX:CompressedClassSpaceSize=<n>参数设置
       MaxMetaspaceSize         = 17592186044415 MB //元空间的最大大小 可由-XX:MaxMetaspaceSize=<n>参数设置
       G1HeapRegionSize         = 0 (0.0MB) //使用G1垃圾收集器的时候,堆被分割的大小 可由-XX:G1HeapRegionSize=<n>参数设置
    
    Heap Usage:
    PS Young Generation //新生代区域分配情况
    Eden Space: //Eden区域分配情况
       capacity = 89653248 (85.5MB)
       used     = 8946488 (8.532035827636719MB)
       free     = 80706760 (76.96796417236328MB)
       9.978989272089729% used
    From Space: //其中一个Survivor区域分配情况
       capacity = 42467328 (40.5MB)
       used     = 15497496 (14.779563903808594MB)
       free     = 26969832 (25.720436096191406MB)
       36.49275037977431% used
    To Space:  //另一个Survivor区域分配情况
       capacity = 42991616 (41.0MB)
       used     = 0 (0.0MB)
       free     = 42991616 (41.0MB)
       0.0% used
    PS Old Generation //老生代区域分配情况
       capacity = 154664960 (147.5MB)
       used     = 98556712 (93.99100494384766MB)
       free     = 56108248 (53.508995056152344MB)
       63.722715216167906% used
    
    1819 interned Strings occupying 163384 bytes.

     二、微调JVM启动参数

    JVM参数大致可以分为三类

    • 标准指令:- 开头,这些是所有的 HotSpot 都支持的参数。可以用 java -help 打印出来。

    • 非标准指令:-X 开头,这些指令通常是跟特定的 HotSpot 版本对应的。可以用 java -X 打印出来。

    • 不稳定参数:-XX 开头,这一类参数是跟特定 HotSpot 版本对应的,并且变化非常大。详细的文档资料非常少。

    在JDK1.8版本下有几个常用的不稳定指令

    • java -XX:+PrintCommandLineFlags :查看当前命令的不稳定指令
    • java -XX:+PrintFlagsInitial :查看所有不稳定指令的默认值
    • java -XX:+PrintFlagsFinal :查看所有不稳定指令最终生效的实际值

    堆内存默认分配:新生区占1/3,老年区占2/3 (新生区分为3块 Eden、From(S0)、To(S1),默认占比是 8:1:1)

    # -Xms: 设置堆初始化内存大小, 默认是 1/64
    # -Xmx: 设置最大分配内存大小, 默认是 1/4
    # -Xss: 线程栈大小
    # -XX:MetaspaceSize: 元空间大小
    # -XX:MaxMetaspaceSize: 元空间最大大小
    java -Xms2G -Xmx2G -Xss1M -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -jar app.jar
    
    # -XX:MaxGCPauseMillis: GC进行STW的最大停顿时间, JVM将尽可能(但不保证)停顿小于这个时间
    # -XX:+UseG1GC 使用G1垃圾收集器
    java -Xms2G -Xmx2G -Xss1M -XX:+UseG1GC -XX:MaxGCPauseMillis=100ms -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M -jar app.jar

    三、查看JVM的一些默认参数

    [root@tes /]# /usr/java/jdk1.7.0_80/bin/java -XX:+PrintCommandLineFlags -version
    -XX:InitialHeapSize=394833984 -XX:MaxHeapSize=6317343744 -XX:+PrintCommandLineFlags -XX:+UseCompressedOops -XX:+UseParallelGC
    java version "1.7.0_80"
    Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
    Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

  • 相关阅读:
    笔试面试题集锦
    Mosquitto pub/sub服务实现代码浅析-主体框架
    查找算法(一)
    基数排序
    插入排序-----希尔排序
    插入排序------直接插入排序
    归并排序
    选择排序--------简单选择排序
    交换排序------冒泡排序
    排序算法
  • 原文地址:https://www.cnblogs.com/raorao1994/p/15055077.html
Copyright © 2020-2023  润新知