jcmd命令行工具-用于调试和诊断java应用程序

476 阅读3分钟

jcmd  command line utility tool  to debug and diagnostic java application

在这篇博文中,通过实例学习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飞行记录器的教程