JVM性能优化工具速查手册

标准参数(各个JVM版本基本稳定不变的)

-help
-server
-client
-version
-showversion
-cp
-classpath

-X参数(非标准参数,会变,但是变化小)

-Xint 解释执行
-Xcomp 第一次使用就编译成本地代码
-Xmixed 混合模式,JVM自己去决定是否编译成本地代码(默认)

-XX参数(非标准,变化很大,或者实验性的)

布尔类型参数

格式:

-XX:[+-]<name> 表示启用或者禁用name的属性   +号表示启动,-号表示禁用

比如:
-XX:+UseConcMarkSweepGC 启用CMS
-XX:+UseG1GC 启用G1

KV类型

格式:

-XX:<name>=<value>  表示name的值是value

比如:
-XX:MaxGCPauseMillis = 500 gc的最大停顿时间是500毫秒
XX:GCTimeRatio = 19

-XMs等价于 -XX:InitialHeapSize 初始化堆大小
-XMx等价于 -XX:MaxHeapSize 最大堆大小

Jps 进程查询

用来查看java进程的工具
在这里插入图片描述

常用命令格式

	jps -参数

常用参数

  • -q
    禁止显示类名称,也就是只显示进程ID

  • -m
    显示进程ID,启动的jar,和传递给Jar的参数,比如springboot启动的时候传的配置文件

  • -l
    显示应用程序main类的完整程序包名称或应用程序JAR文件的完整路径名。

  • -v
    显示进程ID,启动的jar,和传递给JVM的参数

  • -V
    禁止类名称,JAR文件名和传递给main方法的参数的输出,仅生成本地JVM标识符的列表。

jinfo 配置信息

查看启动中的JVM的配置信息
在这里插入图片描述

常用命令格式

jinfo 参数 进程ID

常用参数

  • -flag 配置项 进程ID
    查看当前进程中JVM的某个配置项配置的什么内容

  • -flags 进程ID
    查看当前进程的JVM修改了那些默认值,也就是修改过的配置项都会显示出来

  • -flag +/-配置项 进程ID
    启用(+)或禁用(-)当前进程JVM的某个配置项

  • -flag 配置项=配置内容 进程ID
    修改当前进程JVM的某个配置项为指定的内容

jstat 内存统计

查看JVM的统计信息,比如类加载信息,垃圾收集信息和JIT编译等信息
在这里插入图片描述

常用命令格式

jstat 参数 进程ID 

常用参数

  • -class
    类加载器统计信息。

    Loaded:已加载的类数。
    Bytes:加载的kB数。
    Unloaded:卸载的类数。
    Bytes:卸载的KB数。
    Time:执行类加载和卸载操作所花费的时间。

  • -compiler
    Java HotSpot VM即时编译器统计信息。

    Compiled:执行的编译任务数。
    Failed:编译任务数失败。
    Invalid:无效的编译任务数。
    Time:执行编译任务所花费的时间。
    FailedType:上次失败的编译的编译类型。
    FailedMethod:上次失败的编译的类名和方法。

  • -gc
    垃圾收集的堆统计信息。

    S0C:当前幸存者空间0容量(kB)。
    S1C:当前生存空间1的容量(kB)。
    S0U:幸存者空间0利用率(kB)。
    S1U:幸存者空间1利用率(kB)。
    EC:当前伊甸园空间容量(kB)。
    EU:伊甸园空间利用率(kB)。
    OC:当前的旧空间容量(kB)。
    OU:旧空间利用率(kB)。
    MC:元空间容量(kB)。
    MU:元空间利用率(kB)。
    CCSC:压缩的类空间容量(kB)。
    CCSU:使用的压缩类空间(kB)。
    YGC:年轻一代垃圾收集事件的数量。
    YGCT:年轻一代垃圾回收时间。
    FGC:完整GC事件的数量。
    FGCT:完整的垃圾收集时间。
    GCT:总垃圾收集时间。

  • -gccapacity
    内存池的生成和空间容量。

    NGCMN:最小新一代容量(kB)。
    NGCMX:最大新一代容量(kB)。
    NGC:当前的新一代容量(kB)。
    S0C:当前幸存者空间0容量(kB)。
    S1C:当前生存空间1的容量(kB)。
    EC:当前伊甸园空间容量(kB)。
    OGCMN:最小旧发电容量(kB)。
    OGCMX:最大旧发电容量(kB)。
    OGC:当前的旧发电量(kB)。
    OC:当前的旧空间容量(kB)。
    MCMN:最小元空间容量(kB)。
    MCMX:最大元空间容量(kB)。
    MC:元空间容量(kB)。
    CCSMN:压缩的类空间最小容量(kB)。
    CCSMX:压缩的类空间最大容量(kB)。
    CCSC:压缩的类空间容量(kB)。
    YGC:年轻一代GC事件的数量。
    FGC:完整GC事件的数量。

  • -gccause
    该选项显示的垃圾收集统计信息摘要与该选项相同-gcutil,但包括上一个垃圾收集事件和(如果适用)当前垃圾收集事件的原因。除了为列出的列之外-gcutil,此选项还添加了以下列。

    LGCC:上次垃圾回收的原因
    GCC:当前垃圾收集的原因

  • -gcnew
    新生代统计数据。

    S0C:当前幸存者空间0容量(kB)。
    S1C:当前生存空间1的容量(kB)。
    S0U:幸存者空间0利用率(kB)。
    S1U:幸存者空间1利用率(kB)。
    TT:任职期限。
    MTT:最大使用期限阈值。
    DSS:所需的幸存者大小(kB)。
    EC:当前伊甸园空间容量(kB)。
    EU:伊甸园空间利用率(kB)。
    YGC:年轻一代GC事件的数量。
    YGCT:年轻一代垃圾回收时间。

  • -gcnewcapacity
    新生代空间大小统计信息。

    NGCMN:最小新一代容量(kB)。
    NGCMX:最大新一代容量(kB)。
    NGC:当前的新一代容量(kB)。
    S0CMX:最大幸存者空间0容量(kB)。
    S0C:当前幸存者空间0容量(kB)。
    S1CMX:最大幸存者空间1容量(kB)。
    S1C:当前生存空间1的容量(kB)。
    ECMX:最大伊甸园空间容量(kB)。
    EC:当前伊甸园空间容量(kB)。
    YGC:年轻一代GC事件的数量。
    FGC:完整GC事件的数量。

  • -gcold
    老年代和元空间行为统计。

    MC:元空间容量(kB)。
    MU:元空间利用率(kB)。
    CCSC:压缩的类空间容量(kB)。
    CCSU:使用的压缩类空间(kB)。
    OC:当前的旧空间容量(kB)。
    OU:旧空间利用率(kB)。
    YGC:年轻一代GC事件的数量。
    FGC:完整GC事件的数量。
    FGCT:完整的垃圾收集时间。
    GCT:总垃圾收集时间。

  • -gcoldcapacity
    老年代大小统计信息。

    OGCMN:最小旧发电容量(kB)。
    OGCMX:最大旧发电容量(kB)。
    OGC:当前的旧发电量(kB)。
    OC:当前的旧空间容量(kB)。
    YGC:年轻一代GC事件的数量。
    FGC:完整GC事件的数量。
    FGCT:完整的垃圾收集时间。
    GCT:总垃圾收集时间。

  • -gcmetacapacity
    元空间大小统计信息。

    MCMN:最小元空间容量(kB)。
    MCMX:最大元空间容量(kB)。
    MC:元空间容量(kB)。
    CCSMN:压缩的类空间最小容量(kB)。
    CCSMX:压缩的类空间最大容量(kB)。
    YGC:年轻一代GC事件的数量。
    FGC:完整GC事件的数量。
    FGCT:完整的垃圾收集时间。
    GCT:总垃圾收集时间。

  • -gcutil
    垃圾收集统计信息摘要。

    S0:幸存者空间0利用率占该空间当前容量的百分比。
    S1:生存空间1利用率占空间当前容量的百分比。
    E:Eden空间利用率占空间当前容量的百分比。
    O:旧空间利用率占空间当前容量的百分比。
    M:元空间利用率占空间当前容量的百分比。
    CCS:压缩的类空间利用率(以百分比表示)。
    YGC:年轻一代GC事件的数量。
    YGCT:年轻一代垃圾回收时间。
    FGC:完整GC事件的数量。
    FGCT:完整的垃圾收集时间。
    GCT:总垃圾收集时间。

  • -printcompilation
    Java HotSpot VM编译器方法统计信息。

    Compiled:由最近编译的方法执行的编译任务数。
    Size:最近编译的方法的字节码的字节数。
    Type:最近编译的方法的编译类型。
    Method:标识最近编译的方法的类名和方法名。类名使用斜杠(/)代替点(.)作为名称空间分隔符。方法名称是指定类中的方法。这两个字段的格式与HotSpot-XX:+PrintCompilation选项一致。

jstack 线程堆栈跟踪

查看JVM的线程堆栈信息,比如死锁
在这里插入图片描述
导出的堆栈信息一般会结合如下命令去分析

top -d 进程id -H    这个是查看当前进程中的线程信息
printf "%x" 线程id   这个是将10进制的线程id转化为十六进制的,然后从jstack转出的文件中找对应的线程信息,对应文件中的nid=十六进制的线程id
  

常用命令格式

jstack 参数 进程ID 
常配套转储操作  比如 jstack 进程id > xxx.log

常用参数

  • 无参
    用的比较多

  • -F
    当Jstack -l pid没有响应时,强制堆栈转储。

  • -l
    打印有关锁的其他信息,例如拥有的java.util.concurrent有权同步器的列表

  • -m
    打印具有Java和本机C/C++帧的混合模式堆栈跟踪。

jmap dump内存信息

Java的内存信息-打印指定进程的共享对象存储映射或堆内存详细信息。
在这里插入图片描述

常用命令格式

jmap 参数 进程ID 

常用参数

  • 无参
    没有参数时,JMAP命令打印共享对象映射。对于加载于目标JVM中的每个共享对象,打印起始地址,映射大小和共享对象文件的完整路径。

  • -dump:format=b, file=filename 或者-dump:live,format=b, file=filename
    将hprof二进制格式的Java堆信息转储到file指定的文件中。live子选项是可选的,但是当指定时,只转储堆中的活动对象。要想读取文件可以用jhat工具,或者导入到分析工具里边看,比如mat和jvisualvm等等

  • -finalizerinfo
    打印等待回收的对象信息

  • -heap
    打印所使用的垃圾收集的堆摘要、配置、GC算法和堆使用情况。此外,还打印了插入字符串的数量和大小。

  • -histo或histo:live
    打印堆的直方图。对于每个Java类,都会打印对象数、内存大小(以字节为单位)和完全限定的类名。JVM内部类名以星号(*)前缀打印。如果指定了live,则只计算活动对象。

  • -clstats
    打印Java堆的类装入器统计信息。对于每个类加载器,其名称、活动程度、地址、父类装入器以及加载的类的数量和大小都将打印出来。

  • -F
    当pid没有响应时,将此参数与jmap -dump或jmap -histo选项一起使用。它不支持live。

jhat 查看dump出的信息(很少用)

主要是通过web服务查看jmap导出来的堆信息,默认端口是7000,一般都用工具代替了,比如MAT,我用的比较少。
在这里插入图片描述

常用命令格式

jhat 参数 jmap导出的文件 

常用参数

  • -stack false或true
    关闭跟踪对象分配调用堆栈。如果堆转储中没有分配站点信息,则必须将此标志设置为false。默认值为true。

  • -refs false或true
    关闭对对象引用的跟踪。默认值为true。默认情况下,将为堆中的所有对象计算反向指针,反向指针是指向指定对象(如引用或传入引用)的对象。

  • -port 端口号
    设置jhat HTTP服务器的端口。默认值为7000。

结合使用的linux常用命令

  • vmstat 秒数 次数
    vm的信息, 参数1是多少秒 参数2是输出次数 意思就是每隔几秒输出一次,一共输出几次后停止

  • free -g或-m
    以哪个单位查看当前内存信息

  • iostat -dx 1等
    查看IO读写信息

  • netstat -nlp等
    查看网络,端口等信息

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值