我在过去的几篇文章中都引用了方便的JDK工具jcmd ,但是像我以前对jps所做的那样,仅专注于其实用性 。 jcmd工具是随Oracle Java 7引入的,在通过使用Java标识Java进程的ID (与jps相似),获取堆转储 (与jmap相似),获取线程转储 (与jstack相似)来解决 JVM应用程序 问题方面特别有用。 ),查看虚拟机特征(例如系统属性和命令行标志)(类似于jinfo ),并获取垃圾回收统计信息(类似于jstat )。 jcmd工具被称为“ 用于调查和解决JVM应用程序问题的瑞士军刀 ”和“ 隐藏的宝石” 。

在使用大多数JDK命令行工具(包括jcmd )时,标识要为其使用命令行工具的Java进程的进程ID(pid)通常很重要。 只需运行不带任何参数的命令,使用jcmd即可轻松完成此操作,如下一个屏幕快照所示。

在上面的示例中,运行不带参数的jcmd显示了两个正在运行的Java进程( jcmd自身的pid为324,另一个Java进程的pid为7268)。 请注意,尽管在列出Java进程时jcmd工作原理与jps非常相似,但与没有参数-lm jps相比, jcmd列出的信息更多。

运行jcmd -h用于显示帮助和用法信息jcmd在下一屏幕快照证明。

如刚刚所示,该帮助说明jcmd在“未给出任何选项”时“列出Java进程”。 帮助还指出,这是类似于运行行为jcmd -p ,但我认为它的意思是说运行jcmd不带选项相当于跑步jcmd -l ,这是在接下来的屏幕快照所示。

就像在不带任何选项的情况下运行jcmdjcmd -l列出了Java进程及其各自的pid。 本例中的pids不同,因为它是jcmd的不同执行, jcmd我运行的Java进程也不同。

运行jcmd -h显示相对较少的选项。 要查看jcmd支持的许多功能的帮助,需要询问jcmd特定Java进程支持哪些功能。 下一个屏幕快照对此进行了说明。 我首先运行不带选项的jcmd来发现感兴趣的Java进程的pid(在本例中为6320)。 然后,我可以运行jcmd 6320 help来查看jcmd支持哪些命令。

上一个屏幕快照演示了jcmd支持pid标识的特定Java VM的命令。 具体来说,它指出“以下命令可用:”,然后列出它们:

  • JFR停止
  • 启动JFR
  • JFR转储
  • JFR。检查
  • VM.native_memory
  • VM.check_commercial_features
  • VM.unlock_commercial_features
  • 管理代理停止
  • ManagementAgent.start_local
  • ManagementAgent.start
  • GC.rotate_log
  • GC.class_stats
  • GC.class_histogram
  • GC.heap_dump
  • GC.run_finalization
  • GC运行
  • 线程打印
  • 虚拟机正常运行时间
  • 虚拟机标志
  • VM.system_properties
  • VM.command_line
  • 虚拟机版本
  • 帮帮我

当针对另一个Java VM进程的pid运行jcmd <pid> help ,可能会获得不同的可用命令列表。 下一个屏幕快照中jcmd 1216 help进行了说明,当针对该进程的pid为1216执行jcmd 1216 help时。

通过比较最后两个屏幕快照,可以清楚地看到jcmd支持针对不同Java VM实例的不同命令。 这就是为什么通过在help命令中指定pid列出特定VM支持的命令的原因。 未针对原始检查的VM列出的第二个VM可用的一些命令(在这种情况下为pid 1216)包括以下命令:

  • VM.log
  • 管理代理状态
  • Compiler.directives_clear
  • Compiler.directives_remove
  • Compiler.directives_add
  • Compiler.directives_print
  • VM.print_touched_methods
  • 编译器
  • 编译器代码清单
  • 编译器队列
  • VM.classloader_stats
  • JVMTI.data_dump
  • VM.stringtable
  • 虚拟机
  • VM.class_hierarchy
  • GC.finalizer_info
  • GC.heap_info
  • VM.info
  • VM.dynlibs
  • VM.set_flag

该“帮助”还建议:“有关特定命令的更多信息,请使用'help <command>'。” 在下一个针对jcmdThread.print屏幕快照中说明了jcmd

在讨论jcmd Thread.print命令的主题时,是一个很好的时机来说明如何使用它来查看Java进程的线程堆栈。 下一个屏幕快照显示了执行jcmd <pid> Thread.print (在本例中为pid 6320的Java进程)时看到的结果要冗长得多的开始。

jcmd支持多个VM.*命令: VM.versionVM.uptimeVM.command_lineVM.flagsVM.system_propertiesVM.native_memoryVM.classloader_stats 。 下一个屏幕快照说明了对于使用pid 6320的Java进程使用jcmd <pid> VM.versionjcmd <pid> VM.uptime的情况。

下一个屏幕快照演示了jcmd <pid> VM.command_line使用pid 6320来执行jcmd <pid> VM.command_line

从该屏幕快照(其中显示了运行jcmd 6320 VM.command_line的输出的顶部)中,我们可以从提供给该进程的JVM命令行参数中看到,它是与NetBeans相关的进程。 使用pid 6320对Java进程运行命令jcmd <pid> VM.flags显示传递给该进程的HotSpot选项。

可以使用jcmd <pid> VM.system_properties列出Java进程使用的系统属性,这将在下一个屏幕快照中进行说明。

当尝试对尚未启用本机内存跟踪 (NMT)的Java进程运行jcmd <pid> VM.native_memory ,将显示错误消息“未启用本机内存跟踪”,如下一个屏幕快照所示。

要使用命令jcmd <pid> VM.native_memory ,应使用-XX:NativeMemoryTracking=summary-XX:NativeMemoryTracking=detail选项启动要测量的JVM(Java进程)。 使用这些选项之一启动VM后,就可以对该JVM进程执行命令jcmd <pid> VM.native_memory baseline ,然后执行jcmd <pid> VM.native_memory detail.diff

jcmd <pid> VM.classloader_stats命令可提供对类加载器的了解。 下一个针对pid 1216的Java进程的屏幕快照中显示了该快照:

jcmd <pid> VM.class_hierarchy是一个有趣的命令,可打印在目标Java VM进程中加载​​的类的层次结构。

jcmd <pid> VM.dynlibs可用于查看动态库信息。 在针对使用pid 1216的Java进程执行时的下一个屏幕快照中对此进行了演示。

jcmd <pid> VM.info列出了许多有关目标Java VM进程的信息,包括VM摘要以及有关该进程,垃圾收集事件,动态库,提供给VM的参数以及主机某些特征的信息。机。 在jcmd 1216 VM.info的下一个屏幕快照中演示了此输出开始的一小部分:

下一个屏幕快照展示了jcmd <pid> VM.stringtablejcmd <pid> VM.symboltable

下一个屏幕快照中演示了jcmd <pid> Compiler.directives_print使用。

jcmd支持的几个命令支持管理和监视垃圾收集。 其中两个是jcmd <pid> GC.run [类似于System.gc() ]和jcmd <pid> GC.run_finalization [类似于System.runFinalization() ]。 在下一个屏幕快照中将演示其中的两个。

命令jcmd <pid> GC.class_histogram提供了一种方便的方法来查看对象直方图 ,如下一个屏幕快照所示。

jcmd可用于通过jcmd <pid> GC.heap_dump <filename>针对正在运行的Java VM生jcmd <pid> GC.heap_dump <filename>转储,这将在下一个屏幕快照中进行演示。

现在,可以使用jhat命令来处理jcmd生成的堆转储,如以下两个屏幕快照所示。

有些jcmd命令仅适用于使用-XX:+UnlockDiagnosticVMOptions JVM标志启动的Java VM。 下一个屏幕快照演示了当我尝试针对未以-XX:+UnlockDiagnosticVMOptions标志启动的Java VM运行jcmd <pid> GC.class_stats时发生的情况。

使用-XX:+UnlockDiagnosticVMOptions启动目标VM时, jcmd <pid> GC.class_stats显示“ 有关Java类元数据的统计信息 ”。

这篇文章介绍了jcmd提供的一些命令,但没有涉及与Java Flight Recorder [ JFR ](名称以JFR.*开头的命令)相关的功能,以检查并启用商业功能( jcmd <pid> VM.check_commercial_featuresjcmd <pid> VM.unlock_commercial_features )。

在一个命令行工具中, jcmd汇集了几个命令行JDK工具的功能。 这篇文章演示了jcmd提供的一些功能。

翻译自: https://www.javacodegeeks.com/2016/03/jcmd-one-jdk-command-line-tool-rule.html

jcmd:一个可以全部统治的JDK命令行工具相关推荐

  1. jcmd 命令_jcmd:一个可以全部统治的JDK命令行工具

    jcmd 命令 我在过去的几篇文章中都引用了方便的JDK工具jcmd ,但是像我以前对jps所做的那样,只专注于它的实用性 . jcmd工具是随Oracle Java 7引入的,通过使用它来识别Jav ...

  2. java命令行选项6_6.jdk命令行工具

    名称 主要功能 jps JVM Process Status Tool,显示指定系统内所有HotSpot虚拟机进程 jstat JVM Statistics Minitoring Tool,用于收集H ...

  3. Java生产环境下性能监控与调优详解 第2章 基于JDK命令行工具的监控

    Java生产环境下性能监控与调优详解 第2章 基于JDK命令行工具的监控 2-1 JVM的参数类型 标准参数 x参数 XX参数 2-2 查看JVM运行时参数 2-3 jstat查看JVM统计信息 2- ...

  4. 图解JDK命令行工具实例教程

    JDK附带有很多命令行工具,下面先整一下监视虚拟机和故障处理的命令行. 一 jps - 虚拟机进程状况工具 jps不带参数,显示虚拟机进程ID和主类名称或jar名称: 进入命令行,敲入jps;如图: ...

  5. java性能调试命令_性能测试必备监控技能jvm之jdk命令行工具篇16

    3.png 前言 对于JVM的性能监控,主要注意以下关键参数,通过jdk自带的命令行工具,即可查看相关参数,从而分析系统或目标服务程序中存在的性能瓶颈 jps JVM Process Status T ...

  6. php exec多条命令怎么拼接_PHP--手摸手,教你撸一个会自动补全的命令行工具1

    前言 一次在使用symfony的时候,发现使用命令行的时候有些关键字会自动提示. 介绍 随着laravel,symfony等框架的流行,命令行工具越来越流行,但是很多时候命令太多,根本无法记住所有参数 ...

  7. JVM性能监控工具(一)-jdk命令行工具

    转载:http://blog.csdn.net/top_code/article/details/51456186 当系统出bug需要定位问题的时候,知识.经验是关键基础,数据是依据,工具是运用知识处 ...

  8. jdk命令行工具(jps+jstat+jinfo+jmap+jstack)

    jps:虚拟机进程状况工具 可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(main class,class()函数所在的类)的名称,以及这些进程的本地虚拟机的唯一ID. jps命令格式: jps ...

  9. 【JVM与性能调优】与Java性能调优相关的JDK命令行工具大盘点

    一. jps 命令 1.1 jps介绍 jps(JVM Process Status Tool) 列出Java进程,显示指定系统内所有的HotSpot虚拟机进程. 查询Linux系统当前所有java进 ...

最新文章

  1. linux lock函数,Linux lock_kernel()函数的分析。
  2. 毛边效果 html,Html5 Canvas画线有毛边解决方法
  3. 【学习笔记】HTTPS概述
  4. jstat PID not found产生的原因
  5. 使用Adobe Lifecycle ES将若干个word合并成一个PDF
  6. HDU ACM Steps攻略 ACM Steps的全部内容
  7. Font Configuration and Customization for Open Source Systems - 白皮书翻译和深入
  8. linux下解压命令.7z,CentOS 下安装7-Zip 以及常用的解压命令
  9. Windows mobile 下读取手机SIM卡信息
  10. 一起学java【5】---原生态数据类型使用陷阱
  11. Atitit  深入理解命名空间namespace  java c# php js
  12. 适合游戏视频剪辑CPU排行榜,cpu天梯图
  13. Python股票量化交易(一)
  14. JavaScript 八卦
  15. 支付系统中的设计模式09:组合模式
  16. 我的python面试简历
  17. 算法系列——输出所有的笛卡尔积组合
  18. 和sar比起来,其他Linux命令都是猹
  19. 三天2亿游玩人次,近期爆火的「人生重开模拟器」,好玩在哪?
  20. 《微信小程序七日谈》- 第七天:不要捡了芝麻丢了西瓜

热门文章

  1. 递归算法介绍及Java应用实战
  2. 分享18道Java基础面试笔试题
  3. 分享一套阿里高级Java面试题,要去阿里的先过这些题。
  4. 05-传统开发模式DAO
  5. uni-app打包h5
  6. 人脸检测解析json的工具类face_test
  7. 判断一个男人穷还是富,只看这几点!
  8. 把本地文件上传到gitee
  9. 2020蓝桥杯省赛---java---B---3(蛇形填数)
  10. php oracle 无查询结果,php - Oracle Insert查询不起作用,也不会抛出任何错误 - 堆栈内存溢出...