JVM分析指令解析-jps/jinfo/jstat/jstack/jmap/jcmd

7 篇文章 0 订阅

本文主要解析JVM分析指令-jps/jinfo/jstat/jstack/jmap

jps

英文全名: Java Virtual Machine Process Status Tool
功能: Java虚拟机进程状态工具,正如其名查询虚拟机进程状态的工具,系统层面的工具,故输出的数据都是基础的系统层面数据

指令显示内容
jps -Vpid+VM标识
jps -qpid
jps -lpid + 完全的包名/应用主类名
jps -vpid + 完整启动指令
jps -mpid + 传递给main的参数
jps -V
jps -q
jps -l
jps -v
jps -

jinfo

英文全名: Java Virtual Machine Configuration Information
功能: Java虚拟机配置信息,可以实时查看Java虚拟机各种配置参数和系统属性的命令行工具,可以配合jps获取到pid使用

  1. 查看VM指令的参数
  2. 动态关闭/启用虚拟机配置-并不是所有配置都可以动态修改 java -XX:+PrintFlagsInitial | grep manageable(参考支持动态修改的)
  3. 动态设置虚拟机配置
指令显示内容
jinfo pidVM所有配置参数与系统属性
jinfo -flag VM指令 pid查看VM指令情况
jinfo -flag -VM指令 pid关闭指定的VM指令
jinfo -flag +VM指令 pid开启指定的VM指令
C:\Users\44349>jinfo -help  //查看帮助文档-windows环境
Usage:
    jinfo [option] <pid> 					//连接方式 pid
        (to connect to running process)
    jinfo [option] <executable <core> 		//可执行文件
        (to connect to a core file)
    jinfo [option] [server_id@]<remote server IP or hostname> //ip或域名等
        (to connect to remote debug server)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag		//打印VM指令的参数
    -flag [+|-]<name>    to enable or disable the named VM flag			//动态关闭/启用虚拟机配置
    -flag <name>=<value> to set the named VM flag to the given value	//动态设置虚拟机配置
    -flags               to print VM flags					//打印虚拟机配置
    -sysprops            to print Java system properties	//打印java系统持续配置
    <no option>          to print both of the above 	//空配置,默认打印上面两个指令数据
    -h | -help           to print this help message   	//打印帮助文档

C:\Users\44349>jinfo -flag PrintGC 28692  //查看是否配置了PrintGC
-XX:+PrintGC //有配置
C:\Users\44349>jinfo -flag -PrintGC 28692 //动态关闭PrintGC 配置
C:\Users\44349>jinfo -flag PrintGC 28692 //查看是否配置了PrintGC
-XX:-PrintGC//被关闭了
C:\Users\44349>jinfo -flag +PrintGC 28692//动态打开PrintGC 配置

jstat

英文全名: Monitors Java Virtual Machine (JVM) statistics
功能: 监视Java虚拟机(JVM)统计信息,各种JVM统计数据

指令显示内容
jstat -class pid类装载信息
jstat -compiler pidJIT编译类信息
jstat -gc pidGC次数等信息
jstat -gccapacity pid显示有关世代容量及其相应空间的统计信息
jstat -gccause pid显示有关垃圾回收统计信息(与 相同)的摘要,以及上次和当前(如果适用)垃圾回收事件的原因
jstat -gcnew pid显示有关新一代行为的统计信息
jstat -gcnewcapacity pid显示有关新一代大小及其相应空间的统计信息
jstat -gcold pid显示有关老一代行为的统计信息和元空间统计信息
jstat -gcoldcapacity pid显示有关旧一代大小的统计信息
jstat -gcmetacapacity pid显示有关元空间大小的统计信息
jstat -gcutil pid显示有关垃圾回收统计信息的摘要
jstat -printcompilation pid显示 Java 热点虚拟机编译方法统计信息

官网对每个指令描述非常详细: https://docs.oracle.com/en/java/javase/17/docs/specs/man/jstat.html

C:\Users\44349>jstat -gc 20832
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC(full gc 次数)   FGCT(full gc 花费时间)     GCT
18432.0 29184.0 18234.5  0.0   572416.0 221287.4  375296.0   35752.8   80384.0 75304.5 10752.0 9807.2     10    0.109   3      0.148    0.258

jstack

英文全名: Java stack
功能: 打印Java程序线程的堆栈跟踪,可以用来查看代码内锁情况

指令显示内容
jstack -l pid打印有关锁的附加信息-可以用来查看线程死锁
jstack -m pid打印Java和本机帧(混合模式)
jstack -F pid使程序STW执行指令
C:\Users\44349>jstack -h
Usage:
    jstack [-l] <pid>					//使用pid指定被执行的java程序
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>	//使用可执行文件指定被执行的java程序
        (to connect to a core file)
    jstack [-m] [-l] [server_id@]<remote server IP or hostname> 	//使用Ip或域名等指定被执行的java程序
        (to connect to a remote debug server)

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)  //使程序STW执行指令
    -m  to print both java and native frames (mixed mode)				//打印Java和本机帧(混合模式)
    -l  long listing. Prints additional information about locks			//打印有关锁的附加信息-可以用来查看线程死锁
    -h or -help to print this help message

jmap

英文全名: Java Virtual Machine Memory Map
功能: Java虚拟机内存映射,打印详细信息

指令显示内容
jmap -heap pidheap数据信息
jmap -histo:live pid打印Java对象堆的直方图;如果指定了"live"子选项,则只计算活动对象
jmap -clstats pid打印类加载器列表,包括继承了java.lang.ClassLoader
jmap -finalizerinfo pid打印等待Object.finalize()执行的对象
jmap -dump,format=b,file=保存路径 pid导出heap数据
C:\Users\44349>jmap -h  //打印帮助文档
Usage:
    jstack [-l] <pid>					//使用pid指定被执行的java程序
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>	//使用可执行文件指定被执行的java程序
        (to connect to a core file)
    jstack [-m] [-l] [server_id@]<remote server IP or hostname> 	//使用Ip或域名等指定被执行的java程序
        (to connect to a remote debug server)
        
where <option> is one of:
    <none>               to print same info as Solaris pmap
    -heap                to print java heap summary
    -histo[:live]        to print histogram of java object heap; if the "live"   //打印Java对象堆的直方图;如果指定了"live"子选项,则只计算活动对象
                         suboption is specified, only count live objects
    -clstats             to print class loader statistics			//打印类加载器列表,包括继承了java.lang.ClassLoader
    -finalizerinfo       to print information on objects awaiting finalization    //打印等待Object.finalize()执行的对象
    -dump:<dump-options> to dump java heap in hprof binary format  			//导出heap数据
                         dump-options:
                           live         dump only live objects; if not specified,
                                        all objects in the heap are dumped.
                           format=b     binary format
                           file=<file>  dump heap to <file>
                         Example: jmap -dump:live,format=b,file=heap.bin <pid>   
    -F                   force. Use with -dump:<dump-options> <pid> or -histo		//STW执行
                         to force a heap dump or histogram when <pid> does not
                         respond. The "live" suboption is not supported
                         in this mode.
    -h | -help           to print this help message
    -J<flag>             to pass <flag> directly to the runtime system

jcmd

功能: 在看jdk的虚拟线程(可以简单理解成协程)
虚拟线程无法被普通命令直接被检测,jcmd是提供的可观察虚拟线程的工具

指令显示内容
jcmd Thread.dump_to_file -format=<output_file>线程信息
jcmd 14136  Thread.dump_to_file -format=json monitor.json

会导出json文件,搜索:ThreadPerTaskExecutor@ 即可看到虚拟线程

JDK17提供的所有tool文档

https://docs.oracle.com/en/java/javase/17/docs/specs/man/index.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值