JVM调优常用参数和命令行工具汇总

JVM参数类型

一:标准参数     -

所有的JVM实现都必须实现这些参数的功能,而且向后兼容

例:

 -help

-server -client

-version -showversion

-cp -classpath

二:非标准参数    -X

非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容

例:

-Xint : 解释执行

-Xcomp:第一次使用就编译成本地代码

-Xmixed: 混合模式,JVM自己来决定是否编译成本地代码

三:非(stable)稳定参数    -XX

此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用

例:

堆设置:

-Xms1g  设置初始堆大小

-Xmx4g  设置最大堆大小

-XX:NewRatio=n 设置新生代和老年代比例

-XX:SurvivorRatio=n 设置新生代 eden和Survivor比例

-Xmn1g  设置新生代大小,(eden+ 2 survivor space,设置后NewSize和MaxNewSize是一样的,可以不用再NewSize和MaxNewSize)

-XX:NewSize=2560M 设置新生代初始大小 

-XX:MaxNewSize=2560M 设置新生代最大值

-XX:ParallelGCThreads=8 设置GC线程数量,(调整大小会改变jvm吞吐量和停顿时长)

-XX:NewRatio=4  设置新生代和老年代比例(如4 表示1:4)

-XX:SurvivorRatio=8 设置新生代eden和survivor区比例

##-xx:PermSize=100m 设置永久代初始化大小(java8之后,取消了永久代)

##-XX:MaxPermSize=256m 设置永久代最大值(java8之后,取消了永久代)

-XX:MaxMetaspaceSize=512M 设置元空间最大大小

-XX:MetaspaceSize=20M 设置元空间默认大小 (调整元空间的大小需要fullGC操作,如果应用在启动的时候发生大量fullGC,可能是由于启动过程中元空间大小发生了变化)
-XX:xmn 设置堆中新生代大小

JVM常用命令行工具

jps  (java process Status Tool)

命令格式:

jps [options] [hostid]

options选项:
-l : 显示进程id,显示主类全名或jar路径
-q : 显示进程id
-m : 显示进程id, 显示JVM启动时传递给main()的参数
-v : 显示进程id,显示JVM启动时显示指定的JVM参数

hostid选项

服务器ip

例: jps -v查看jvm参数

 jinfo(Configuration Info for Java) 

jinfo [option]   <pid>

  • no options 输出所有的系统属性和参数
  • -flag 打印指定名称的参数
  • -flag [+|-] 打开或关闭参数
  • -flag = 设置参数
  • -flags 打印所有参数
  • -sysprops 打印系统配置

例:jinfo -flags 29

jstat 

jstat [option] VMID [interval] [count ]

jstat命令用于查看JVM运行时的状态信息,包括内存状态、垃圾回收等。

option参数解释:

-class class loader的行为统计
-compiler HotSpt JIT编译器行为统计
-gc 垃圾回收堆的行为统计
-gccapacity 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计
-gcutil 垃圾回收统计概述
-gccause 垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因
-gcnew 新生代行为统计
-gcnewcapacity 新生代与其相应的内存空间的统计
-gcold 年老代和永生代行为统计
-gcoldcapacity 年老代行为统计
-printcompilation HotSpot编译方法统计

例:jstat -gc 29

 其中

S0C survivor0大小
S1C survivor1大小
S0U survivor0已使用大小
S1U survivor1已使用大小
EC Eden区大小
EU Eden区已使用大小
OC 老年代大小
OU 老年代已使用大小
MC 方法区大小
MU 方法区已使用大小
CCSC 压缩类空间大小
CCSU 压缩类空间已使用大小
YGC 年轻代垃圾回收次数
YGCT 年轻代垃圾回收消耗时间
FGC Full GC垃圾回收次数
FGCT Full GC垃圾回收消耗时间
GCT 垃圾回收消耗总时间
 

jstack

jstack是用来查看JVM线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合。使用jstack命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环等。jstack还可以查看程序崩溃时生成的core文件中的stack信息。

jstack [options]

-F 当使用jstack 无响应时,强制输出线程堆栈;
-m 同时输出java堆栈和c/c++堆栈信息(混合模式);
-l 除了输出堆栈信息外,还显示关于锁的附加信息。

jmap(JVM Memory Map)

获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。

通常在fullgc可通过此命令dump出堆文件进行分析

jmap -dump:live,format=b,file=${out} ${pid}  dump堆文件

例:jmap -dump:live,format=b,file=/data/share/202305/17/heap.hprof 29

查看堆分配信息

jmap -heap ${pid}

例:jmap -heap ${pid}

jmap -histo:live 37 | head -30  查看堆中占用内存较多的前30名

如果查询结果中存在很多系统类,可以使用grep命令进一步过滤出业务中的对象:

jmap -histo:live 37 |grep com.XXX| head -30

堆内内存、Code区域或者使用unsafe.allocateMemory和DirectByteBuffer申请的堆外内存排查


jcmd ${pid} GC.heap_info 查看jvm堆和非堆内存占用

项目启动参数中加入 -XX:NativeMemoryTracking=detail

jcmd${pid} VM.native_memory summary scale=MB

jcmd ${pid} VM.native_memory detail

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值