JVM-工具-jcmd
1|0一、jcmd 用法
1|11.1 基本知识
jcmd 是在 JDK1.7 以后,新增了一个命令行工具。
jcmd 是一个多功能的工具,相比 jstat 功能更为全面的工具,可用于获取目标 Java 进程的性能统计、JFR、内存使用、垃圾收集、线程堆栈、JVM 运行时间,也可以手动执行 GC、导出(TODO 能导出线程信息?)线程信息、堆信息等信息。
1|21.2 注意
1.2.1 jcmd 在 JDK1.7 以后才出现
1.2.2 jcmd 在旧的 jdk 版本中有些命令不支持
示例:
在1.8.0_73中不支持 GC.heap_info 参数:
但是 JDK 1.8.0_282 中支持 GC.heap_info 参数:
2|0二、jcmd 用法
下面以 1.8.0_282 版本 JDK 的 jcmd 命令进行说明。
2|12.1 查看 help
参数描述
-
pid:[常用] 接收诊断命令请求的进程ID。
-
main class :**[不常用] **接收诊断命令请求的进程的main类。匹配进程时,main类名称中包含指定子字符串的任何进程均是匹配的。
如果多个正在运行的Java进程共享同一个main类,诊断命令请求将会发送到所有的这些进程中。
-
command:[常用] 支持的子命令,示例:GC.class_stats、GC.class_histogram。
注意: 如果任何参数含有空格,你必须使用英文的单引号或双引号将其包围起来。 此外,你必须使用转义字符来转移参数中的单引号或双引号,以阻止操作系统shell处理这些引用标记。当然,你也可以在参数两侧加上单引号,然后在参数内使用双引号(或者,在参数两侧加上双引号,在参数中使用单引号)。
-
Perfcounter.print:[不常用] 打印目标Java进程上可用的性能计数器。性能计数器的列表可能会随着Java进程的不同而产生变化。
-
-f file:[不常用] 从文件file中读取命令,然后在目标Java进程上调用这些命令。在file中,每个命令必须写在单独的一行。以"#"开头的行会被忽略。当所有行的命令被调用完毕后,或者读取到含有stop关键字的命令,将会终止对file的处理。
-
-l:[常用] 查看所有的进程列表信息。
-
-h:[常用] 查看帮助信息。(同 -help)
2|22.2 查看进程 jcmd -l【常用】
命令: jcmd -l
作用:查看 当前机器上所有的 jvm 进程信息。
同类作用的命令:jcmd
、 jcmd -l
、 jps -lm
这三个命令作用相同
示例:
2|32.3 列出当前运行的 java 进程可以执行的操作【常用】
命令:jcmd <pid> help
作用:列出当前运行的 java 进程可以执行的操作
说明:不同的 jvm 进程 支持的操作可能是不一样的
示例:
2|42.4 查看具体命令的选项
命令:jcmd <pid> help command
作用:列出当前运行的 java 进程可以执行的操作
说明:不同的 jvm 进程 支持的操作可能是不一样的
示例:
2|52.5 查看内存信息【常用】
命令:jcmd <pid> GC.heap_info
作用:查看JVM内存信息,虽然名称为heap_info,但是除了堆内存信息,也会有堆外内存之一的Metaspace的信息。相比jstat
命令结果会更直观一些。
示例:
2|62.6 查看性能统计信息
命令:jcmd <pid> PerfCounter.print
作用:查看指定进程的性能统计信息。
示例:
2|72.7 VM.uptime
命令:jcmd <pid> VM.uptime
作用:查看 JVM 的已启动时长。
示例:
2|82.8 GC.class_histogram【常用】
命令:jcmd <pid> GC.class_histogram
作用:查看系统中类统计信息。
同类作用的命令:和jmap -histo pid的效果是一样的,可以查看每个类的实例数量和占用空间大小。
示例:
2|92.9 Thread.print
命令:jcmd <pid> Thread.print
作用:查看线程堆栈信息。
同类作用的命令:和jstack -l
作用一样
2|102.10 GC.heap_dump
命令:jcmd <pid> GC.heap_dump FILE_NAME
作用:查看 JVM 的Heap Dump。导出的 dump 文件,可以使用MAT 或者 Visual VM 等工具进行分析(如果只指定文件名,默认会生成在启动 JVM 的目录里)
同类作用的命令:和 jmap -dump:format=b,file=heapdump.phrof pid
作用一样
示例:
2|112.11 VM.system_properties
命令:jcmd <pid> VM.system_properties
作用:查看 JVM 的属性信息。
同类作用的命令:和jinfo -sysprops pid
作用一样。jinfo pid
会输出 VM.system_properties 和 VM.flags,命令短,更好记住,所以推荐直接使用jinfo pid
。
示例:
2|122.12 VM.flags
命令:jcmd <pid> VM.flags
作用:查看 JVM 的启动参数。
同类作用的命令:和jinfo -flags pid
作用一样。jinfo pid
会输出 VM.system_properties 和 VM.flags,命令短,更好记住,所以推荐直接使用jinfo pid
。
示例:
2|132.13 VM.command_line
命令:jcmd <pid> VM.command_line
作用:查看 JVM 的启动命令行。
示例:
2|142.14 GC.run_finalization
命令:jcmd <pid> GC.run_finalization
作用: 对 JVM 执行 java.lang.System.runFinalization()
。执行一次 finalization 操作,相当于执java.lang.System.runFinalization()
。调用已经失去引用的对象的finalize方法,但是JVM可以选择执行或者不执行。
示例:
2|152.15 GC.run
命令:jcmd <pid> GC.run
作用:对 JVM 执行 java.lang.System.gc()
。同 GC.run_finalization
告诉垃圾收集器打算进行垃圾收集,但是JVM可以选择执行或者不执行。
2|162.16 VM.version
命令:jcmd <pid> VM.version
作用:查看目标jvm进程的版本信息。
示例:
2|172.17 VM.native_memory
命令:jcmd <pid> VM.native_memory
作用:查看目标jvm进程的Native Memory Tracking (NMT)信息,用于追踪JVM的内部内存使用。
注意:
打开NMT会带来5%-10%的性能损耗。
-XX:NativeMemoryTracking=xx参数必须放在 -jar 前面,示例:java -XX:NativeMemoryTracking=detail -jar -Xmn512m user.jar
使用 -XX:NativeMemoryTracking=summary 可以用于开启NMT,其中该值默认为off。
可以设置summary、detail来开启;开启的话,大概会增加5%-10%的性能消耗;使用-XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics。
可以在jvm shutdown的时候输出整体的native memory统计;
其他的可以使用jcmd pid VM.native_memory相关命令进行查看、diff、shutdown等整个memory主要包含了Java Heap、Class、Thread、Code、GC、Compiler、Internal、Other、Symbol、Native Memory Tracking、Arena Chunk这几部分;其中reserved表示应用可用的内存大小,committed表示应用正在使用的内存大小
示例:
备注:reserved表示应用可用的内存大小,committed表示应用正在使用的内存大小。
作者:terry蒋
链接:https://www.jianshu.com/p/011f0e3a39ff
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
__EOF__

本文链接:https://www.cnblogs.com/caicz/p/16542942.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2021-08-02 tcp连接 优化
2021-08-02 Linux上TCP的几个内核参数调优
2021-08-02 TCP参数调优详解