Java常用命令、JVM常用命令
文章目录
- 前言
- 一、内存相关
- 二、GC参数
- 三、资源限制
- 四、调试与监控参数
前言
以下内容以Oracle JDK 21
为例,以下内容仅展示部分参数,完整参数请查阅文档。
官方文档:Java 命令
一、内存相关
-Xmn
设置分代收集器中年轻代的初始大小和最大大小。建议为堆的 1/4 到 1/2。可以使用 -XX:NewSize
来设置初始大小,-XX:MaxNewSize
来设置最大大小,而不是使用-Xmn选项来同时设置年轻代堆的初始和最大大小。
-Xms
设置堆的最小和初始大小。此值必须是 1024 的倍数,且大于 1 MB。如:-Xms512m 或 -Xms2g。-XX:InitialHeapSize
选项也可以用来设置初始堆大小。如果它在命令行上的 -Xms
之后出现,那么初始堆大小将设置为
-XX:InitialHeapSize
指定的值。
-Xmx
设置堆的最大大小。此值必须是 1024 的倍数,且大于 2 MB。-Xmx
选项相当于 -XX:MaxHeapSize
。
-Xss
设置线程堆栈大小。如:-Xss256k。此选项类似于 -XX:ThreadStackSize
。
-XX:MetaspaceSize
元空间初始大小。
-XX:MaxMetaspaceSize
设置元空间最大大小。默认情况下,大小不受限制。如:-XX:MaxMetaspaceSize=256m
-XX:NewRatio= 比率
设置年轻代与老年代大小的比率。默认情况下,此选项设置为 2。
-XX:SurvivorRatio= 比例
设置 Eden 空间与 Survivor 空间的比率。默认情况下,此选项设置为 8。
二、GC参数
垃圾收集器:
-XX:+UseG1GC
使用 G1 垃圾收集器。
-XX:+UseParallelGC
使用并行清除垃圾收集器。
-XX:+UseSerialGC
使用串行垃圾收集器。
-XX:+UseZGC
启用 Z 垃圾收集器 (ZGC)。
G1参数:
-XX:MaxGCPauseMillis= 时间
设置最大 GC 暂停时间的目标值(以毫秒为单位)。这是一个软目标,JVM 将尽力实现该目标。
-XX:G1HeapRegionSize= 大小
设置在使用垃圾优先 (G1) 收集器时 Java 堆细分成的区域大小。该值是 2 的幂,范围是 1 MB 到 32 MB。
-XX:G1NewSizePercent= 百分比
设置用作年轻代大小的最小堆百分比。默认值为 Java 堆的 5%。
-XX:G1MaxNewSizePercent= 百分比
设置堆大小的百分比,用作年轻代大小的最大值。默认值为 Java 堆的 60%。
-XX:G1HeapWastePercent= 百分比
设置您愿意浪费的堆内存百分比。当可回收百分比低于堆内存浪费百分比时,Java HotSpot VM 不会启动混合垃圾回收周期。默认值为 5%。
-XX:G1MixedGCCountTarget= 数字
设置标记后混合垃圾收集的目标次数。默认混合垃圾回收次数为 8 次。混合垃圾回收的目标是控制在此目标次数以内。
-XX:G1MixedGCLiveThresholdPercent
设置 G1 判断一个 Region 是否应该参与 Mixed GC 的“存活对象占比”阈值。默认占用率为 85%。
例:如果一个 Region 存活对象占 70%,低于 85%,则 G1 会在 Mixed GC 中回收它。如果占 90%,G1 认为回收收益太小,就跳过。
IHOP:
-XX:+G1UseAdaptiveIHOP
控制老年代占用率的自适应计算,默认是启用的。
G1 GC 中,IHOP 是“老年代使用率达到多少时触发并发标记周期”的阈值。
开启该参数后,JVM 会动态调整 IHOP 的触发阈值,根据之前 GC 周期耗时来预测什么时候该开始并发标记,从而避免 Full GC。
-XX:InitiatingHeapOccupancyPercent
设置老年代使用率达到多少百分比时,触发 G1 的并发标记周期。
默认情况下,初始值设置为 45%。值为 0 表示从一开始就不间断地进行并发 GC 循环,直到 G1 自适应地设置此值。
-XX:G1AdaptiveIHOPNumInitialSamples
设置在 G1 自适应 IHOP 生效前,需要收集多少个 GC 周期的数据样本。只有当样本数量达到该值,才会用来动态估算 IHOP 触发点。默认值为 3。
ZGC 参数:
XX:ZAllocationSpikeTolerance
设置 ZGC 的分配峰值容忍度。默认情况下,此选项设置为 2.0。(ZGC 会把当前分配速率加上一个额外的“突增系数”来做 GC 触发预测,避免内存用尽时才触发 GC。)
例如:当前内存使用:10 GB / 每秒分配速率:500 MB/s / GC 延迟:2s / ZAllocationSpikeTolerance = 2
预计未来 2 秒将分配:500MB/s * 2s = 1 GB
加上突增容忍:10 GB * 2% = 0.2 GB
总预估使用:11.2 GB
-XX:ZCollectionInterval
设置使用 ZGC 时两次 GC 循环之间的最大间隔(以秒为单位)。默认情况下,此选项设置为 0(禁用)。
-XX:ZFragmentationLimit= 百分比
设置 ZGC 可接受的最大堆碎片率(以百分比表示)。默认情况下,此选项设置为 25。使用较低的值将导致更积极地压缩堆,以消耗更多 CPU 时间为代价回收更多内存。
-XX:+ZProactive
使用 ZGC 时启用主动 GC 循环。默认情况下,此选项处于启用状态。当开启 ZProactive 时,ZGC 即使没有达到触发并发 GC 的阈值,也会定期主动执行。
-XX:+ZUncommit
使用 ZGC 时启用取消提交未使用的堆内存。默认情况下,此选项处于启用状态。取消提交未使用的堆内存将降低 JVM 的内存占用,并使该内存可供其他进程使用。(在一定条件下,把不再使用的堆内存返回给操作系统)
-XX:ZUncommitDelay= 秒
设置在取消提交之前堆内存必须处于闲置状态的时间(以秒为单位)。默认情况下,此选项设置为 300(5 分钟)。(当某段堆内存连续 300 秒都没被使用,ZGC 会把它从物理内存中释放掉,回收给操作系统。)
字符串去重:
-XX:+UseStringDeduplication
启用字符串去重。默认情况下,此选项处于禁用状态。要使用此选项,必须启用垃圾优先 (G1) 垃圾收集器。(Java 中的字符串是不可变的,且使用非常频繁,会造成大量重复的内容。)
-XX:StringDeduplicationAgeThreshold= 阈值
识别达到指定年龄且被视为可进行重复数据删除的 String 对象。此选项的默认值为 3
其他参数:
-XX:+DisableExplicitGC
禁用 System.gc() 方法。JVM 可执行 GC。
-XX:+ExplicitGCInvokesConcurrent
启用使用 System.gc() 请求调用并发 GC。此选项默认禁用,只能通过 -XX:+UseG1GC
选项启用。
-XX:+AggressiveHeap
启用 Java 堆优化。
-XX:ConcGCThreads= 线程
设置并发 GC 使用的线程数。
-XX:ParallelGCThreads= 线程
设置 Stop-the-world (STW) 工作线程的数量。
日志:
从 JDK 9 开始,JVM 引入了 统一日志系统(Unified Logging Framework),用 -Xlog 替代了以前大量零散的 -XX:+PrintGCXXX、-XX:PrintGCDetails 等日志参数。
-Xlog:gc
打印基础 GC 信息。(相当于-XX:+PrintGC)
-Xlog:gc*
打印详细 GC 日志。(相当于-XX:+PrintGCDetails)
-Xlog:safepoint
应用停顿时间、应用执行时间。(
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCApplicationConcurrentTime)
-Xlog:gc+task*=debug
打印 GC 工作线程每个任务的耗时。(
-XX:+PrintGCTaskTimeStamps)
-Xlog:gc+heap=trace
每次GC前后打印堆信息。(-XX:+PrintHeapAtGC)
三、资源限制
-XX:ActiveProcessorCount= x
虚拟机将使用的 CPU 数量。
-XX:ErrorFile= 文件名
指定错误数据写入的路径和文件名。如:
-XX:ErrorFile=./hs_err_pid%p.log
XX:MaxDirectMemorySize
设置 java.nio 的最大总大小。如:
-XX:MaxDirectMemorySize=1m
四、调试与监控参数
-XX:+HeapDumpOnOutOfMemoryError
允许将 Java 堆转储到当前目录中的文件中。
-XX:HeapDumpPath= 路径
设置写入堆转储的路径和文件名。如:
-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof
-XX:NativeMemoryTracking=
指定跟踪 JVM 本机内存使用情况的模式。
off 指示不跟踪 JVM 本机内存使用情况。如果未指定 -XX:NativeMemoryTracking 选项,则这是默认行为。
summary 仅跟踪 JVM 子系统(例如 Java 堆、类、代码和线程)的内存使用情况。
detail 除了跟踪 JVM 子系统的内存使用情况外,还要跟踪单个 CallSite 、单个虚拟内存区域及其提交区域的内存使用情况。
-XX:+OptimizeStringConcat
启用 String 连接操作的优化。