jcmd
1.jps
2.jcmd 1761[pid] PerfCounter.print 查看指定进程的性能统计信息
概述
在JDK1.7以后,新增了一个命令行工具 jcmd。他是一个多功能的工具,可以用它来导出堆、查看Java进程、导出线程信息、执行GC、还可以进行采样分析(jmc 工具的飞行记录器)。
命令格式
jcmd <pid | main class> <command ... | PerfCounter.print | -f file>
jcmd -l
jcmd -h
描述
pid:接收诊断命令请求的进程ID。
main class :接收诊断命令请求的进程的main类。匹配进程时,main类名称中包含指定子字符串的任何进程均是匹配的。如果多个正在运行的Java进程共享同一个main类,诊断命令请求将会发送到所有的这些进程中。command:接收诊断命令请求的进程的main类。匹配进程时,main类名称中包含指定子字符串的任何进程均是匹配的。如果多个正在运行的Java进程共享同一个main类,诊断命令请求将会发送到所有的这些进程中。
注意: 如果任何参数含有空格,你必须使用英文的单引号或双引号将其包围起来。 此外,你必须使用转义字符来转移参数中的单引号或双引号,以阻止操作系统shell处理这些引用标记。当然,你也可以在参数两侧加上单引号,然后在参数内使用双引号(或者,在参数两侧加上双引号,在参数中使用单引号)。
Perfcounter.print:打印目标Java进程上可用的性能计数器。性能计数器的列表可能会随着Java进程的不同而产生变化。
-f file:从文件file中读取命令,然后在目标Java进程上调用这些命令。在file中,每个命令必须写在单独的一行。以"#"开头的行会被忽略。当所有行的命令被调用完毕后,或者读取到含有stop关键字的命令,将会终止对file的处理。
-l:查看所有的进程列表信息。
-h:查看帮助信息。(同 -help)
查看进程 jcmd -l
命令:jcmd -l
描述:查看 当前机器上所有的 jvm 进程信息
jcmd
jcmd -l
jps
这三个命令的效果是一样的
查看性能统计
命令:jcmd pid PerfCounter.print
描述:查看指定进程的性能统计信息。
C:\Windows\system32>jcmd 9592 PerfCounter.print
9592:
java.ci.totalTime=16704
java.cls.loadedClasses=438
java.cls.sharedLoadedClasses=0
java.cls.sharedUnloadedClasses=0
java.cls.unloadedClasses=0
java.property.java.class.path="D:\work\git\test\target\classes"
java.property.java.endorsed.dirs="D:\Program Files\Java\jre1.8.0_91\lib\endorsed"
java.property.java.ext.dirs="D:\Program Files\Java\jre1.8.0_91\lib\ext;C:\Windows\Sun\Java\lib\ext"
java.property.java.home="D:\Program Files\Java\jre1.8.0_91"
...
列出当前运行的 java 进程可以执行的操作
命令:jcmd PID help
C:\Windows\system32>jcmd 9592 help
9592:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
help
查看具体命令的选项
如果想查看命令的选项,比如想查看 JFR.dump 命令选项,可以通过如下命令:
jcmd 11772 help JFR.dump

1.JRF 相关命令
JRF 功能跟 jmc.exe 工具的飞行记录器的功能一样的。
要使用 JRF 相关的功能,必须使用 VM.unlock_commercial_features 参数取消锁定商业功能 。


启动JFR
执行命令:jcmd $PID JFR.start name=abc,duration=120sDump JFR
等待至少duration(本文设定120s)后,执行命令:jcmd PID JFR.dump name=abc,duration=120s filename=abc.jfr(注意,文件名必须为.jfr后缀)检查JFR状态
执行命令:jcmd $PID JFR.check name=abc,duration=120s停止JFR
执行命令:jcmd $PID JFR.stop name=abc,duration=120sJMC分析
切回开发机器,下载步骤3中生成的abc.jfr,打开jmc,导入abc.jfr即可进行可视化分析
VM.uptime
命令:jcmd PID VM.uptime
描述:查看 JVM 的启动时长:

GC.class_histogram
命令:jcmd PID GC.class_histogram
描述:查看系统中类统计信息

这里和jmap -histo pid的效果是一样的
这个可以查看每个类的实例数量和占用空间大小。
Thread.print
命令:jcmd PID Thread.print
描述:查看线程堆栈信息。

该命令同 jstack 命令。
GC.heap_dump
命令:jcmd PID GC.heap_dump FILE_NAME
描述:查看 JVM 的Heap Dump
C:\Users\jjs>jcmd 10576 GC.heap_dump d:\dump.hprof
10576:
Heap dump file created
跟 jmap命令:jmap -dump:format=b,file=heapdump.phrof pid 效果一样。
导出的 dump 文件,可以使用MAT 或者 Visual VM 等工具进行分析。
注意:如果只指定文件名,默认会生成在启动 JVM 的目录里。
VM.system_properties
命令:jcmd PID VM.system_properties
描述:查看 JVM 的属性信息
C:\Users\jjs>jcmd 10576 VM.system_properties
10576:
#Wed Jan 31 22:30:20 CST 2018
java.vendor=Oracle Corporation
osgi.bundles.defaultStartLevel=4
......
os.version=10.0
osgi.arch=x86_64
path.separator=;
java.vm.version=25.91-b15
org.osgi.supports.framework.fragment=true
user.variant=
osgi.framework.shape=jar
java.awt.printerjob=sun.awt.windows.WPrinterJob
osgi.instance.area.default=file\:/C\:/Users/jjs/eclipse-workspace/
sun.io.unicode.encoding=UnicodeLittle
org.osgi.framework.version=1.8.0
......
VM.flags
命令:jcmd PID VM.flags
描述:查看 JVM 的启动参数
C:\Users\jjs>jcmd 10576 VM.flags
10576:
-XX:CICompilerCount=3 -XX:ConcGCThreads=1
-XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=268435456
-XX:MarkStackSize=4194304 -XX:MaxHeapSize=1073741824
-XX:MaxNewSize=643825664 -XX:MinHeapDeltaBytes=1048576
-XX:+UseCompressedClassPointers -XX:+UseCompressedOops
-XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC
-XX:-UseLargePagesIndividualAllocation -XX:+UseStringDeduplication
VM.command_line
命令:jcmd PID VM.command_line
描述:查看 JVM 的启动命令行
C:\Users\jjs>jcmd 10576 VM.command_line
10576:
VM Arguments:
jvm_args: -Dosgi.requiredJavaVersion=1.8
-Dosgi.instance.area.default=@user.home/eclipse-workspace
-XX:+UseG1GC -XX:+UseStringDeduplication
-Dosgi.requiredJavaVersion=1.8 -Xms256m -Xmx1024m
java_command: <unknown>
java_class_path (initial): D:\tool\...\org.eclipse.equinox.launcher.jar
GC.run_finalization
命令:jcmd PID GC.run_finalization
描述: 对 JVM 执行 java.lang.System.runFinalization()
C:\Users\jjs>jcmd 10576 GC.run_finalization
10576:
Command executed successfully
执行一次finalization操作,相当于执行java.lang.System.runFinalization()
GC.run
命令:jcmd PID GC.run
描述:对 JVM 执行 java.lang.System.gc()
C:\Users\jjs>jcmd 10576 GC.run
10576:
Command executed successfully
告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的。
PerfCounter.print
命令:jcmd PID PerfCounter.print
描述:查看 JVM 性能相关的参数
C:\Users\jjs>jcmd 10576 PerfCounter.print
10576:
java.ci.totalTime=93024843
java.cls.loadedClasses=18042
java.cls.sharedLoadedClasses=0
java.cls.sharedUnloadedClasses=0
java.cls.unloadedClasses=3
......
VM.version
命令:jcmd PID VM.version
描述:查看目标jvm进程的版本信息
C:\Users\jjs>jcmd 10576 VM.version
10576:
Java HotSpot(TM) 64-Bit Server VM version 25.91-b15
JDK 8.0_91
作者:jijs
链接:https://www.jianshu.com/p/388e35d8a09b
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
jcmd的更多相关文章
- jcmd、jmc介绍
一.jcmd命令使用 概述 在JDK 1.7之后,新增了一个命令行工具jcmd.它是一个多功能工具,可以用来导出堆,查看Java进程,导出线程信息,执行GC等. 使用示例 下面这个命令能够列出当前运行 ...
- Java 7 命令/工具 jcmd 使用详细解释
常见功能 列出 Java 进程 PID 以及 名称 列出进程的 thread dump 得到进程的 heap dump 得到进程的 JVM 参数 具体如下: 列出 Java 进程 PID 以及 名称 ...
- jcmd命令使用
概述 在JDK 1.7之后,新增了一个命令行工具jcmd. 它是一个多功能工具,能够用来导出堆,查看java进程,导出线程信息.运行GC等. 使用演示样例 以下这个命令能够列出当前运行的全部虚拟机: ...
- JVM - 内存溢出问题排查相关命令jcmd jmap
jcmd http://docs.oracle.com/javase/8/docs/technotes/tools/windows/jcmd.html jcmd-l 列出正在执行的JAVA进程ID ...
- 十二、jdk工具之jcmd介绍(堆转储、堆分析、获取系统信息、查看堆外内存)
目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...
- jcmd jmap应用:一个String经典笔试题的验证
笔试题: String strA = new String("123123");这一行中创建了几个String对象?? public class StringHeapCountTe ...
- jcmd的简单实用
命令jcmd 显示所有java进程id及相关信息 命令 jcmd java_pid help 显示某个java进程的所有可用命令 ➜ jobs jcmd 61185 help 61185: The f ...
- jcmd命令实战
继续来根据之前的那篇infoq的文章的介绍熟悉工具,上一次咱们学习使用了: 接下来学习它里面提到的另一个工具: jcmd是一个非常之强大的命令行工具,能输出很多很多的信息,也是在处理JVM的一些问题经 ...
- JVM工具jcmd实践
暂时参考以下链接,后续补充自己的实践. https://www.jianshu.com/p/388e35d8a09b
随机推荐
- 烽火HG220G-U E00L2.03M2000光猫改桥接教程
烽火HG220G-U E00L2.03M2000光猫改桥接教程 P.S. 此教程同样适用于HG221G/HG260G-U/HG261G.(2016.12) 随着北京联通从原有的ONU升级到HGU之后, ...
- linux学习笔记--程序与进程管理
.工作管理 1.前台程序放后台程序 命令后 加 & 2.任务执行时将前台任务任务放到后台中并[暂停] ctr + z 3.jobs 观察后台工作状态 及多少任务在执行,可以通过 help ...
- css垂直居中方法
CSS垂直居中的简便方法:{position:absolute;left:0;bottom:0;top:0;right:0;margin:auto;}.
- redux与redux-react使用示例
redux使用 <script type="text/babel"> var Counter=React.createClass({ incrementIfOdd:fu ...
- cyberduck的SSH登录
1.通过配置SSH秘钥. 2.不点匿名(不要点匿名),如果非要填一个名字的话,你写root就行. 3.书签.
- python3 语法小结
(1) 关键字 # -*- coding: utf-8 -*- #!/usr/bin/python3 """ 1.关键字(保留字) ['False', 'None', ' ...
- 雷林鹏分享:jQuery EasyUI 树形菜单 - 创建基础树形网格
jQuery EasyUI 树形菜单 - 创建基础树形网格 树形网格(TreeGrid)组件从数据网格(DataGrid)继承,但是允许在行之间存在父/子节点关系.许多属性继承至数据网格(DataGr ...
- English trip V1 - B 6.Where Are You From? Teacher:Patrick Key: 一般疑问句和否定句中的be动词
In this lesson you will learn to talk about countries and languages. 本节课你将学习到关于谈论城市和语言 课上内容(Lesson) ...
- 记一次RAID阵列的迁移经历
xu言: 最近,某电信机房因为空调漏水问题导致了我司的Dell R430 服务器的主板及CPU不同程度受损.服务器已经不能正常开机.但是,又基于把服务器的数据需要最短时间进行恢复.抱着试试看的心里进行 ...
- GreenDao使用解析
GreenDao是一个轻量级的数据库框架,相比Xutils 等他的速度和效率会更快更好 这里展示GreenDao 的使用方法 ①建立 compile 'org.greenrobot:greendao: ...