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)

原文地址:https://www.cnblogs.com/raorao1994/p/15055077.html