
在这篇博文中,通过实例学习JCMD命令行工具。
JCMD 是一个命令行工具,用于诊断java进程。它在Java应用程序中用于调试以下使用情况:
- 当Java应用程序崩溃时
- 了解应用程序堆内存和垃圾收集的情况
- 排除故障和诊断JVM应用程序
这个工具可作为Java JDK安装的一部分。
它发送一个诊断信号来检索JVM的调试信息进程ID和类。
这个单一的工具可以回答以下大部分问题:
- 如何使用jcmd找到一个正在运行的java进程列表,而不使用选项
- 如何使用Thread.print为一个java进程生成线程转储。
- 如何使用GC.run从命令行启用垃圾收集运行
- 如何使用ManagementAgent.stop/start/start_local管理远程管理代理
- 使用native_memory查看应用程序的本地内存使用情况
- 使用VM.system_properties列出系统属性
- 获取一个JVM的所有属性的报告
- 使用VM.version显示HotSpot和JDK版本
- 使用VM.flags获得所有打印出来的标志。
- 使用VM.uptime获得JVM应用程序的运行时间
- 使用GC.class_histogram显示类的内存使用直方图
- 如何使用GC.heap_dump获取java应用程序的Heap dump?
JCMD命令的语法
选项有-l,-f, 和-h 。当没有提供药水时,它会打印出一个java进程的列表。
-f选项允许从文件中读取命令- -l选项显示java进程的信息列表
- -h帮助选项
B:\Workspace\modifysf>jcmd -l
4656 org.codehaus.plexus.classworlds.launcher.Launcher
5412 sun.tools.jcmd.JCmd -l
10444 com.kiran.MainApp
上述命令给出了在JVM中运行的进程ID和进程名称。接下来,为了获得每个进程的详细诊断信息,我们需要再运行一个命令来获得命令列表。
B:\Workspace\modifysf>jcmd org.codehaus.plexus.classworlds.launcher.Launcher help
6604:
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
For more information about a specific command use 'help '.
运行下面的命令来获取一个进程的堆栈数据
jcmd (processid) GC.heap_dump (path)
- 进程ID是一个用jcmd命令获取的数字
- 文件路径位置
java飞行记录器停止/启动/转储/检查选项
java flight recorder 分析记录并允许获得关于应用程序和JVM的微观细节。这个功能在java商业许可中是可用的。要使用这些记录,首先,我们需要在应用程序中启用它们
java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
JFR.stop- 停止录音JFR.start- 这个选项允许启动录音JFR.dump- 转载所有的数据JFR。check- 这个选项返回一个进程的记录状态
本机内存摘要细节
native memory 使用情况将不会被跟踪。可以通过用-XX:NativeMemoryTracking=detail 来启动应用程序。
下面是特定进程的本地内存的命令
jcmd org.codehaus.plexus.classworlds.launcher.Launcher VM.native_memory
未找到JCMD命令
有时,当你在终端运行jcmd命令时,你会得到jcmd command not found 。
这里有以下步骤可以检查:
- 首先,通过运行
java -v命令,确保JDK已经安装或没有检查到 - 如果没有安装Java,请从官方网站安装JDK。
- 另外,请确保JAVA的环境变量已经设置,即JAVA_HOME。
总结
学习了jcmd命令关于采取堆和线程转储、本地内存汇总、java飞行记录器的教程