可能会随着版本变更移除,在标准参数的基础上进行扩展的参数。
-XX表示的非Stable参数,可能随时取消, Hotspot 中主要的参数大致分为3类
- 性能参数(Performance Options):用于JVM的性能调优和内存分配控制,如初始化内存大小的设置;
- 行为参数(Behavioral Options):用于改变JVM的基础行为,如GC的方式和算法的选择;
- 调试参数(Debugging Options):用于监控、打印、输出等jvm参数,用于显示jvm更加详细的信息;
使用方法:
-XX:+ 启用选项-XX:- 关闭选项
-XX:= 给选项设置一个数字类型值,可跟单位,例如 32k, 1024m, 2g
-XX:= 给选项设置一个字符串值,例如-XX:HeapDumpPath=./dump.core
性能参数往往用来定义内存分配的大小和比例,相比于行为参数和调试参数,一个比较明显的区别是性能参数后面往往跟的有数值,常用如下:
参数及其默认值 | 描述 |
---|---|
-Xms100M | -XX:InitialHeapSize=100M 堆的初始化大小 |
-Xmx100M | -XX:MaxHeapSize=100M 堆的最大内存 |
-Xss100k | -XX:ThreadStackSize=100k 虚拟机栈的大小 默认是1m |
-XX:NewSize=2.125m | 新生代初始内存的大小 |
-XX:MaxNewSize=size | 新生代最大内存大小 |
-XX:MaxPermSize=m | 非最大值(jdk 8.0已移除) |
-XX:PermSize=m | 非初始值(jdk 8.0已移除) |
-XX:MetaspaceSize=21m | 初始化元空间大小,位服务器默认约为21m |
-XX:MaxMetaspaceSize=21m | 最大元空间大小,默认没有 |
-XX:MaxTenuringThreshold=15 | 对象在新生代存活区切换的次数(坚持过MinorGC的次数,每坚持过一次,该值就增加1),大于该值会进入老年代(年龄阈值) |
-XX:MaxHeapFreeRatio=70 | GC后java堆中空闲量占的最大比例,大于该值,则堆内存会减少 |
-XX:MinHeapFreeRatio=40 | GC后java堆中空闲量占的最小比例,小于该值,则堆内存会增加 |
-XX:NewRatio=2 | 新生代内存容量与老生代内存容量的比例,设置的是老年代 |
-XX:ReservedCodeCacheSize= 32m | 保留代码占用的内存容量 |
-XX:ThreadStackSize=512K | 设置线程栈大小,若为0则使用系统默认值 |
-XX:LargePageSizeInBytes=4m | 设置用于Java堆的大页面尺寸 |
-XX:PretenureSizeThreshold=100000000 | 大于该值的对象直接晋升入老年代(这种对象少用为好) |
-XX:SurvivorRatio=8 | Eden区域Survivor区的容量比值,如默认值为8,代表Eden:Survivor1:Survivor2=8:1:1 |
行为参数主要用来选择使用垃圾收集器组合,以及控制运行过程中的GC策略等
参数及其默认值 | 描述 |
---|---|
-XX:+UseSerialGC | 启用串行GC,即采用Serial+Serial Old模式 |
-XX:+UseParNewGC | 使用ParNew+Serial Old收集器组合 |
-XX:+UseParallelGC | 启用并行GC,即采用Parallel Scavenge+Serial Old收集器组合(-Server模式下的默认组合) |
-XX:GCTimeRatio=99 | 设置用户执行时间占总时间的比例(默认值99,即1%的时间用于GC) |
-XX:MaxGCPauseMillis=time | 设置GC的最大停顿时间(这个参数只对Parallel Scavenge有效)(JVM会尽力实现,但不保证达到) |
-XX:ParallelGCThreads |
设置年轻代线程数(当cpu合数小于等于8,默认cpu核数相同; 当cpu核数超过8, ParllGCThreads设置为 3+(5*CPU_COUNT)/8)
|
-XX:+UseParallelOldGC | 使用Parallel Scavenge +Parallel Old组合收集器 |
-XX:+UseConcMarkSweepGC | 使用ParNew+CMS+Serial Old组合并发收集,优先使用ParNew+CMS,当用户线程内存不足时,采用备用方案Serial Old收集。 |
-XX:-DisableExplicitGC | 禁止调用System.gc();但jvm的gc仍然有效 |
-XX:+ScavengeBeforeFullGC | 新生代GC优先于Full GC执行 |
-XX:+UseG1GC | 使用 G1 垃圾收集器 |
-XX:InitiatingHeapOccupancyPercent=45 | mixed gc中也有一个阈值参数 ,当老年代大小占整个堆大小百分比达到该阈值时,会触发一次mixed gc. 默认值为 45 |
-XX:ConcGCThreads=n | 并发垃圾收集器使用的线程数量. 默认值随JVM运行的平台不同而不同 |
-XX:G1ReservePercent=n | 设置堆内存保留为假天花板的总量,以降低提升失败的可能性. 默认值是 10 |
-XX:G1HeapRegionSize=n | 使用G1时Java堆会被分为大小统一的的区(region)。此参数可以指定每个heap区的大小. 默认值将据 heap size 算出最优解. 最小值为 1Mb, 最大值为 32Mb. |
调试参数,主要用于监控和打印GC的信息
参数及其默认值 | 描述 |
---|---|
-XX:-CITime | 打印消耗在JIT编译的时间 |
-XX:ErrorFile=./hs_err_pid.log | 保存错误日志或者数据到文件中 |
-XX:-ExtendedDTraceProbes | 开启solaris特有的dtrace探针 |
-XX:HeapDumpPath=./java_pid.hprof | 指定导出堆信息时的路径或文件名 |
-XX:-HeapDumpOnOutOfMemoryError | 当首次遭遇OOM时导出此时堆中相关信息 |
-XX:OnError=“;” | 出现致命ERROR之后运行自定义命令 |
-XX:OnOutOfMemoryError=“;” | 当首次遭遇OOM时执行自定义命令 |
-XX:-PrintClassHistogram | 遇到Ctrl-Break打印类实例的柱状信息,与jmap -histo功能相同 |
-XX:-PrintConcurrentLocks | 遇到Ctrl-Break打印并发锁的相关信息,与jstack -l功能相同 |
-XX:-PrintCommandLineFlags | 打印在命令行中出现过的标记 |
-XX:-PrintCompilation | 当一个方法被编译时打印相关信息 |
-XX:-PrintGC | 每次GC时打印相关信息 |
-XX:-PrintGC Details | 每次GC时打印详细信息 |
-XX:-PrintGCTimeStamps | 打印每次GC的时间戳 |
-XX:-TraceClassLoading | 跟踪类的加载信息 |
-XX:-TraceClassLoadingPreorder | 跟踪被引用到的所有类的加载信息 |
-XX:-TraceClassResolution | 跟踪常量池 |
-XX:-TraceClassUnloading | 跟踪类的卸载信息 |
-XX:-TraceLoaderConstraints | 跟踪类加载器约束的相关信息 |
jps 是(java process Status Tool), Java版的ps命令,查看java进程及其相关的信息,如果想找到一个java进程的pid,那可以用jps命令替代linux中的ps命令了,简单而方便。
命令格式:jps [options] [hostid]
options参数解释:
hostid : 主机或其他服务器ip
常用示例:
- jps -l 输出jar包路径,类全名
- jps -m 输出main参数
- jps -v 输出JVM参数
jinfo是用来查看JVM参数和动态修改部分JVM参数的命令
命令执行异常参考:
命令格式:jinfo [options] <pid>
options参数解释:
pid : 进程号
常用示例:
查看JVM参数和系统配置
jinfo 11666
jinfo -flags 11666
jinfo -sysprops 11666
查看打印GC日志参数
jinfo -flag PrintGC 11666
jinfo -flag PrintGCDetails 11666
打开GC日志参数
jinfo -flag +PrintGC 11666
jinfo -flag +PrintGCDetails 11666
关闭GC日志参数
jinfo -flag -PrintGC 11666
jinfo -flag -PrintGCDetails 11666
jinfo支持修改的参数:
window: java -XX:PrintFlagsFinal -version | findstr manageable
Linux: java -XX:PrintFlagsFinal -version | grep manageable
jstat命令是使用频率比较高的命令,主要用来查看JVM运行时的状态信息,包括内存状态、垃圾回收等
命令格式:jstat [options] VMID [interval] [count]
options参数解释:
常用示例及打印字段解释:
jstat -gcutil 11666 1000 3
11666为pid,每隔1000毫秒打印一次,打印3次
字段解释:
jstat -gc 11666 1000 3
-gc和-gcutil参数类似,只不过输出字段不是百分比,而是实际的值。
字段解释:
jstack是用来查看JVM线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合。使用jstack命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环等。jstack还可以查看程序崩溃时生成的 core 文件中的 stack 信息。
命令格式:jstack [options] <pid>
option参数解释:
cpu占用过高问题
- 在thread中找到cpu占用高的线程id
- 使用jstack -l 查看进程的线程快照
- 线程快照中找到指定线程,并分析代码
jstack检查死锁问题
public class Demo2_DeadLock { private static Object obj1 = new Object(); private static Object obj2 = new Object(); public static void main(String[] args) { new Thread(new Thread1()).start(); new Thread(new Thread2()).start(); } private static class Thread1 implements Runnable { public void run() { synchronized (obj1) { System.out.println("Thread1 拿到了 obj1 的锁"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj2) { System.out.println("Thread1 拿到了 obj2 的锁"); } } } } private static class Thread2 implements Runnable { public void run() { synchronized (obj2) { System.out.println("Thread2 拿到了 obj2 的锁"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj1) { System.out.println("Thread2 拿到了 obj1 的锁"); } } } } }
执行指令:
jstack -l 11666
jmap可以生成 java 程序的 dump 文件,也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列
命令格式:jmap [option] <pid>
option参数解释:
dump-options:
常用示例:
把java堆中的存活对象信息转储到dump.bin文件
jmap -dump:live,format=b,file=D:/dump.bin 10
输出当前没有在等待执行finalizer方法的对象
jmap -finalizerinfo 10
输出堆的详细信息
jmap -heap 10
jmap -heap 11666
输出存活对象统计信息
jmap -histo:live 11666 | more
jmap -histo:live 11666 | more
jhat是用来分析jmap生成dump文件的命令,jhat内置了应用服务器,可以通过网页查看dump文件分析结果,jhat一 般是用在离线分析上。
命令格式:jhat [option] [dumpfile]
option参数解释:
常用示例:
jhat dump.bin
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- esig.cn 版权所有 湘ICP备2023023988号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务