9 JVM调优参数
9.1 参数类型
-
标准参数
- java -version
- java -help
- java -server
-
-X参数
非标准参数,也就是在JDK各个版本中可能会有变动;
- -Xint 解释执行
- -Xcomp 第一次使用就编译成本地代码
- -Xmixed 混合模式,JVM自己来决定
-
-XX参数
-
Boolean类型
格式:
-XX:[+-]<name>
+ 或 - 表示启用或者禁用name属性比如:
-XX:+UseConcMarkSweepGC
表示启用CMS类型的垃圾回收器 -
非Boolean类型
格式:
-XX<name>=<value>
表示name属性的值是value比如:
-XX:MaxGCPauseMillis=500
设置GC最大停顿时间
-
9.2 其他参数
-Xms1000m
等价于-XX:InitialHeapSize=1000m
,设置初始堆内存大小-Xmx1000m
等价于-XX:MaxHeapSize=1000m
,设置 最大堆内存大小-Xss128k
等价于-XX:ThreadStackSize=128k
9.3 常见命令及参数
关于JVM命令以及调优工具官方说明地址:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/
9.3.1 jps
查看java 进程
9.3.2 jinfo
实时查看和调整JVM配置参数
jinfo -flag name pid
查看某个java进程的name属性的值
如:查看最大堆内存的值 jinfo -flag MaxHeapSize pid
查看G1 GC的配置 jinfo -flag UseG1GC pid
9.3.4 常用参数
查看默认参数有哪些?
-XX:+PrintFlagsInitial
查看java 环境初始默认值;java -XX:+PrintCommandLineFlags -version
打印出用户手动选项的 XX 选项
参数 | 说明 | 含义 |
---|---|---|
-XX:ClCompilerCount | 大于1,会影响系统稳定性 | 最大并行编译数 |
-XX:InitialHeapSize | 简写-Xms100M | 初始化堆大小 |
-XX:MaxHeapSize=1 | 简写-Xmx100M | 最大堆大小 |
-XX:NewSize=20M | 设置年轻代的大小 | |
-XX:MaxNewSize=50M | 年轻代最大大小 | |
-XX:OldSize=50M | 设置老年代大小 | |
-XX:MetaspaceSize=50M | 设置方法区大小 | |
-XX:MaxMetaspaceSize=50M | 方法区最大大小 | |
-XX:+UseParallelGC | 新生代,吞吐量优先 | 使用UseParallelGC |
-XX:+UseParallelOldGC | 老年代,吞吐量优先 | 使用UseParallelOldGC |
-XX:+UseConcMarkSweepGC | 老年代,停顿时间优先 | 使用CMS |
-XX:+UseG1GC | 新生代,老年代,停顿时间优先 | 使用G1GC |
-XX:NewRatio | -XX:Ratio=4,新生代:老年代=1:4 | 新老生代的比值 |
-XX:SurvivorRatio | 值为8,(s0+s1):Eden=1:8 | 两个S区和Eden区的比值 |
-XX:+HeapDumpOnOutOfMemoryError | 堆发生溢出,自动生成dump文件 | 启动堆内存溢出打印 |
-XX:HeapDumpPath=heap.hprof | 当前目录生成一个heap.hprof文件 | 指定堆内存溢出打印目录 |
XX:+PrintGCDetails -XX:+PrintGCTimeStamps | 打印出GC日志 | |
-Xss128k | 3000-5000最佳 | 设置每个线程的堆栈大小 |
-XX:MaxTenuringThreshold=6 | 默认值为 15 | 新生代到老年代的临界值 |
-XX:InitiatingHeapOccupancyPercent | 启动并发GC周期时堆内存使用占比 | |
-XX:G1HeapWastePercent | 默认是10%,如果并发标记可回收的空间小于10%,则不会触发MixedGC | 允许的浪费堆空间的占比 |
-XX:MaxGCPauseMillis=200ms | 暂停时间不能太小,太小的话就会导致出现G1跟不上垃圾产生的速度。最终退化成Full GC | G1最大停顿时间 |
-XX:ConcGCThreads=n | 并发垃圾收集器使用的线程数量 | |
-XX:G1MixedGCLiveThresholdPercent=65 | 默认占用率为 65% | 混合垃圾回收周期中要包括的旧区域设置 |