淘先锋技术网

首页 1 2 3 4 5 6 7

【目录】 【上一篇:JVM 监控工具】 【下一篇:分析 GC 日志】

十二、JVM 运行时参数

1、JVM 参数选项类型

1.1、标准参数选项

  • 比较稳定,后续版本基本不会变化
  • - 开头
  • java -help 命令弹出来的命令
    在这里插入图片描述

1.2、-X 参数选项

  • 后续有可能变化
  • -X 开头
  • java -X 命令弹出来的命令
    在这里插入图片描述

1.3、-XX 参数选项

Boolean类型格式:

-XX:+<option>  启用option属性
-XX:-<option>  禁用option属性
例:
-XX:-UseParallelGC: 不选择 ParallelGC 垃圾收集器
-XX:+UseG1GC: 启用 G1 收集器

非Boolean类型格式

-XX:<option>=<number>  设置option数值,可以带单位如k/K/m/M/g/G
-XX:<option>=<string>  设置option字符
例:
-XX:NewSize=1024m  设置年轻代初始值为 1024MB
-XX:MaxNewSize=1024m  设置年轻代最大内存为 1024MB

2、常用的 JVM 参数选项

2.1、打印设置的 XX 选项及值

-XX:+PrintCommandLineFlags:  可以在程序运行前打印出用户手动设置或者 JVM 自动设置的 XX 选项
-XX:+PrintFlagsInitial:  打印出所有 XX 选项的默认值
-XX:+PrintFlagsFinal:  打印出 XX 选项在运行时生效的值
-XX:+PrintVMOptions:  打印 JVM 的参数

2.2、堆、栈、方法区等内存大小设置

-Xmx1024m  等价于 -XX:InitialHeapSize,设置 JVM 初始堆内存为 1024MB
-Xmx1024m  等价于 -XX:MaxHeapSize,设置 JVM 最大堆内存为 1024MB
-Xmn2g     设置年轻代大小为 2GB, 官方推荐配置为整个堆大小的 3/8
-XX:NewSize=1024m  设置年轻代初始值为 1024MB
-XX:MaxNewSize=1024m  设置年轻代最大内存为 1024MB
-XX:SurvivorRatio=8  设置年轻代中 Eden 区 与 Survivor 区的比值,默认为 8
-XX:+UseAdaptiveSizePolicy  自动选择各区大小比例
-XX:NewRatio=4  设置老年代与年轻代的比值(默认值是 2 )
-XX:PretenureSizeThreadshold=1024  设置让大于此阈值的对象直接分配在老年代,单位为字节;(只对 Serial、ParNew收集器有效)
-XX:MaxTenuringThreshold=15  新生代晋升老年代年龄阈值
-XX:+PrintTenuringDistribution  让 JVM 每次在 MinorGC 后,打印出当前使用的 Survivor 中对象的年龄分

-Xss128k  设置每个线程栈大小为 128k

方法区

-XX:MetaspaceSize  初始元空间大小
-XX:MaxMetaspaceSize  最大元空间大小(默认无限制)
-XX:+UseCompressedOops  压缩对象指针
-XX:+UseCompressedClassPointers 压缩类指针
-XX:CompressedClassSpaceSize  设置 Klass Metaspace 大小,默认为 1G

2.3、OutOfMemory 相关的选项

-XX:+HeapDumpOnOutOfMemoryError   表示在内存出现 OOM 的时候,生成 Dump 文件
-XX:+HeapDumpBeforeFullGC  表示在出现 FullGC 之前,生成 Dump 文件
-XX:HeapDumpPath=<path>  生成 Dump 文件的路径
-XX:OnOutOfMemoryError  指定一个可行性程序或者脚本的路径,当发生 OOM 的时候,去执行这个脚本
	例如: -XX:OnOutOfMemoryError=/opt/Server/restart.sh  发生 OOM 时,服务重启
restart.sh 脚本,linux 环境
#!/bin/bash
pid=$(ps -ef|grep Server.jar|awk '{if($8=="java"){print $2}}')
kill -9 $pid
cd /opt/Server/;sh run.sh

2.4、垃圾收集器相关选项

Paralle 回收器

-XX:+UseParallelGC  手动指定年轻代使用 Parallel 并行垃圾收集器
-XX:ParallelGCThreads  设置年轻代并行收集器的线程数, 一般的, 最好与 CPU 数量相等, 以避免过多的线程数影响垃圾收集线程.
	默认情况下, 当 CPU 数量小于 8 个, ParallelGCThreads 的值等于 CPU 的数量
	当 CPU 数量大于 8 个, ParallelGCThreads 的值等于 3 + [[5 * CPU_Count] / 8]
-XX:MaxGCPauseMillis 设置垃圾收集器最大停顿时间
-XX:GCTimeRatio  垃圾收集时间占总时间比例
-XX:+UseAdaptiveSizePolicy  开启 Parallel Scavenge 收集器自适应调节策略

G1 回收器

-XX:MaxGCPauseMillis  设置期望达到最大的 GC 停顿时间, 默认值是 200ms
-XX:ParallelGCThread  设置 STW时 GC 线程数量, 最大设置为 8
-XX:ConcGCThreads  设置并发标记的线程数, 将值设置为并行垃圾回收线程数(ParallelGCThread)的 1/4 左右
-XX:InitiationHeapOccupancyPercent  设置触发并发 GC 周期的 Java 堆占用率阈值, 超过此值, 就触发 GC, 默认值是 45
-XX:G1NewSizePercent、-XX:G1MaxNewSizePercent  新生代占用整个堆内存的最小百分比(默认 5%)、最大百分比(默认 60%)
-XX:G1ReservePercent=10  保存内存区域,防止 to space(Survuvir 中的 to 区)溢出

2.5、GC 日志相关选项

常用参数

-verbose:gc  输出 GC 日志信息, 默认输出到标准输出
-XX:+PrintGC  等同于 -verbose:gc, 表示打开简化的 GC 日志
-XX:+PrintGCDetails  在发生垃圾回收时, 输出详细的 GC 日志
-XX:+PrintGCTimeStamps  输出 GC 发生时的时间戳
-XX:+PrintGCDetaStamps  输出日期格式的时间戳
-XX:+PrintHeapAtGC  每一次 GC 前和 GC, 都打印堆信息
-Xloggc:<file>  把 GC 日志写入到一个文件中

其他参数

-XX:+TraceClassLoading  监控类的加载
-XX:+PrintGCApplicationStoppedTime  打印 GC,线程的停顿时间
-XX:+PrintGCApplicationConcurrentTime  打印收集之前打印出应用中未中断的执行时间
-XX:+PrintReferenceGC  记录回收了多少种不同引用类型的引用
-XX:+PrintTenuringDistribution  让 JVM 在每次 MinorGC 后打印出当前使用的 Survivor 中对象的年龄分布
-XX:+UseGCLogFileRotation  启用 GC 日志文件的自动转存

【目录】 【上一篇:JVM 监控工具】 【下一篇:分析 GC 日志】