转自Devopslab' blog
(此处附带一篇美团点评团队的文章:Spring MVC注解故障追踪记)
jcmd用于向正在运行的JVM发送诊断信息请求,是从JDK1.7开始提供可以说是jstack和jps的结合体
命令格式
|
jcmd [ options ]
jcmd [ pid | main-class ] PerfCounter.print
jcmd [ pid | main-class ] command [ arguments ]
jcmd [ pid | main-class ] -f file
|
options
命令行选项
pid
结束命令请求的进程ID
main-class
接收诊断命令请求的进程的main类
command [arguments]
命令
假使想要发送一个诊断命令请求到com.example.MyClass name=”Value of name argument”,其命令格式如下
|
jcmd com.example.MyClass name=\"Value of name argument\"
jcmd com.example.MyClass name="'Value of name argument'"
jcmd com.example.MyClass name='"Value of name argument"'
|
PerfCounter.print
打印目标进程的性能计数器
- file
从文件file中读取命令,然后在目标Java进程上调用这些命令。在file中,每个命令必须写在单独的一行。
以"#"开头的行会被忽略。当所有行的命令被调用完毕后,或者读取到含有stop关键字的命令,
将会终止对file的处理。
实例查看当前java进程
|
$ jcmd
#进程pid #进程mainClass
7012 sun.tools.jcmd.JCmd
4876 org.apache.catalina.startup.Bootstrap start
|
查看目标jvm中能获取到的信息
|
$ jcmd 4876 help
4876:
The following commands are available:
VM.native_memory
VM.commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
Thread.print
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
help
For more information about a specific command use 'help <command>'.
#如上所示有很多选项 要查看具体的选项意思和用法可以利用如下方式查看帮助信息
#jcmd pid help <command>
#例如
$ jcmd 4876 help GC.run
4876:
GC.run
Call java.lang.System.gc().
Impact: Medium: Depends on Java heap size and content.
Syntax: GC.run
|
查看目标jvm进程的版本信息
|
$ jcmd 4876 VM.version
4876:
Java HotSpot(TM) Client VM version 24.75-b04
JDK 7.0_75
|
查看目标JVM进程的properties
|
$ jcmd 4876 VM.system_properties
4876:
#Wed Jan 20 11:08:17 CST 2016
java.runtime.name=Java(TM) SE Runtime Environment
java.vm.version=24.75-b04
shared.loader=
java.vm.vendor=Oracle Corporation
java.vendor.url=http\://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) Client VM
tomcat.util.buf.StringCache.byte.enabled=true
file.encoding.pkg=sun.io
user.script=
|
查看目标进程的参数
|
$ jcmd 4876 VM.flags
4876:
-XX:InitialHeapSize=16777216 -XX:MaxHeapSize=268435456 -XX:-UseLargePagesIndividualAllocation
|
查看类柱形图
这里和jmap -histo pid的效果是一样的
$ jcmd 4876 GC.class_histogram
4876:
num #instances #bytes class name
1: 141718 16093456 [C
2: 77395 9721744
3: 77395 5579408
4: 6261 3956752
5: 140036 3360864 java.lang.String
6: 13098 2974464 [B
7: 6261 2573432
8: 5512 2386208
|
# 查看JVM性能相关的参数
```bash
$ jcmd 4876 PerfCounter.print
4876:
java.ci.totalTime=3840798
java.cls.loadedClasses=6312
java.cls.sharedLoadedClasses=0
java.cls.sharedUnloadedClasses=0
java.cls.unloadedClasses=50
...
|
显示所有线程栈
|
$ jcmd 4876 Thread.print | more
4876:
2016-01-20 11:15:36
Full thread dump Java HotSpot(TM) Client VM (24.75-b04 mixed mode):
"http-nio-8055-exec-10" daemon prio=6 tid=0x190c0400 nid=0x1468 waiting on condition [0x1d38f000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
|
dump出hprof文件
|
$ jcmd 4876 GC.heap_dump dump.bin
|
执行一次finalization操作,相当于执行java.lang.System.runFinalization()
|
$ jcmd 4876 GC.run_finalization
|
执行一次Full GC相当于执行java.lang.System.gc()
$ jcmd 4876 GC.run
参考
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/JavaJCMD/index.html
http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/jcmd.html
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html
http://hirt.se/blog/?p=211
分享到:
相关推荐
了解并掌握这些JDK命令,对于日常开发、调试和性能优化都大有裨益。通过阅读《JDK常用命令详解.doc》和《jdk-bin下的命令详解---转载,学习下.txt》,你可以更深入地学习每个命令的用法和具体示例,从而提升你的Java...
jvm命令行工具,java性能优化,jdk命令工具, jcmd命令、jps命令、jmap命令、jstack命令、jinfo命令、jstat命令
"jdk.jcmd"是JDK命令工具,用于诊断和管理Java进程,它包含了很多如jinfo、jmap等命令的实现。 "java.datatransfer"模块处理数据传输,如剪贴板操作和拖放功能。"jdk.internal.vm.compiler",也就是JIT(Just-In-...
9. **jdk.jcmd**:JDK命令行工具,提供了许多用于诊断、管理和操作JVM的命令,如JVM信息查询、堆内存分析、垃圾收集等。 10. **jdk.dynalink**:动态链接库,提供了一种方式来在运行时动态绑定方法调用,通常用于...
6. **JDK.jcmd**: JDK命令工具,提供了一系列命令行工具,用于运行时诊断和管理Java应用程序,如内存信息查询、垃圾收集等。 7. **JDK.dynalink**: 动态链接库,提供了一种高效的方式在运行时链接Java方法,常用于...
2. **jdk.jcmd**:这部分源码包含了JCMD命令行工具,它是Java诊断命令的接口,可以用来监控和分析Java应用程序的运行状态。 3. **java.base**:这是Java平台标准版的基础模块,包含了许多核心类,如Object、String...
此外,`jdk.jcmd`是JDK10引入的新工具,用于命令行调试和诊断,提供了一系列的JVM诊断命令。而`jdk.internal.ed`则包含了早期的文本编辑器实现,虽然在JDK10中已不再使用,但了解其设计思路对于理解早期Java发展历史...
`jcmd`是Java开发工具集(JDK)中的一款强大调试工具,自JDK7开始引入,旨在提供一个统一的接口来执行多种诊断任务,包括但不限于分析内存、线程堆栈、性能计数器等。它使得开发者无需依赖其他独立的工具,如`jstack...
9. **内存堆分析**:JDK 1.9提供了新的命令行工具`jcmd`,可以用来诊断和分析Java进程的内存使用情况。 10. **并行配置工具**:`jlink`工具允许开发者创建自定义的、轻量级的Java运行时,只包含应用程序所需的模块...
【jcmd:JDK14中的调试神器】 jcmd是Java Development Kit(JDK)提供的一种强大而全面的调试工具,自JDK7开始引入。它允许开发者向Java虚拟机(JVM)发送各种诊断命令,以进行性能分析、内存管理、线程调试等操作...
- 使用`java -version`和`javac -version`命令验证JDK是否成功安装和配置。 4. **开发与运行Java程序:** - 使用JDK中的javac编译器将源代码(.java)编译成字节码(.class)。 - 使用java命令运行编译后的字节码,...
9. **改进的JVM诊断**:JDK 7提供了一些新的JMX(Java Management Extensions)MBeans和命令行工具,如jcmd、jhsdb等,便于诊断和分析JVM的行为。 **安装与配置**: 1. 下载的文件`jdk-7u80-windows-x64.exe`是...
- **性能分析**:GraalVM提供了丰富的性能分析工具,如`jcmd`、`jinfo`、`jmap`等,帮助开发者了解应用的运行状态,进行性能调优。 - **自定义编译策略**:GraalVM的JIT编译器支持自定义编译策略,开发者可以通过`...
7. **Java运行时诊断命令**:`jcmd`工具得到了扩展,增加了更多用于诊断和分析JVM状态的命令。 8. **文件系统链接**:`java.nio.file`包新增了对符号链接的支持,允许在Java程序中处理操作系统级别的文件链接。 9....
"jdk.jcmd"是一个命令行工具,提供了多种诊断和管理JVM的功能,如垃圾收集、线程信息、类加载统计等。它是Java诊断命令的集合,简化了开发者对JVM的日常维护工作。 "jdk.dynalink"动态链接库是Java的一个模块,它...
同时,`PATH`环境变量也需要更新,添加JDK的bin目录,这样在命令行中就可以直接运行`javac`、`java`等命令。 JDK 6u45是一个较旧的版本,发布于2013年,它支持Java SE 6规范,相比后来的版本可能缺少一些新特性、...
9. **诊断命令**:JDK13可能提供了更多的诊断命令和工具,帮助开发者调试和分析JVM的行为,比如`jcmd`、`jinfo`、`jmap`等。 10. **JVM内存模型**:JDK13可能继续优化内存模型,确保多线程环境下数据的一致性和可见...
12. **jcmd**:Java命令工具,提供了对JVM的多种控制命令。 13. **native libraries**:JDK还包括一系列本地库,以支持Java平台的特定功能,如图形和网络通信等。 安装`jdk-8u11-linux-x64.tar.gz`在Linux系统上...
- **jcmd**:Java命令工具,提供了JDK诊断命令的统一接口。 3. **Java开发流程**: - 使用文本编辑器编写`.java`源文件。 - 使用`javac`编译源代码,生成`.class`字节码文件。 - 使用`java`命令运行编译后的...
10. **JVM诊断命令增强**:JDK 1.7提供了更多的JVM监控和诊断工具,如jcmd、jinfo、jstack等,帮助开发者更好地理解和优化Java应用程序的性能。 对于Android开发者而言,虽然Android官方推荐使用更新的JDK版本,但...