jcmd 命令

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

在使用大多数JDK命令行工具(包括jcmd )时,标识要为其使用命令行工具的Java进程的进程ID(pid)通常很重要。 使用jcmd可以轻松完成此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 ,可能会获得不同的可用命令列表。 下一个屏幕快照说明了这一点,当针对该进程的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说明了如何执行此Thread.print

在讨论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 jcmd <pid> GC.class_stats的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 命令

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

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

    我在过去的几篇文章中都引用了方便的JDK工具jcmd ,但是像我以前对jps所做的那样,仅专注于其实用性 . jcmd工具是随Oracle Java 7引入的,在通过使用Java标识Java进程的ID ...

  2. JDK内置命令行工具

    java命令行 序号 接口 java Java 应用的启动程序 javac JDK 内置的编译工具 javap 反编译 class 文件的工具 javadoc 根据 Java 代码和标准注释,自动生成 ...

  3. 懒人神器 !一个创意十足的 Python 命令行工具

    作者 | 写代码的明哥 来源 | Python编程时光 当听到某些人说 xx 库非常好用的时候,我们总是忍不住想要去亲自试试. 有一些库,之所以好用,是对一些库做了更高级的封闭,你装了这个库,就会附带 ...

  4. 如何用Linux的at命令安排一个任务

    at命令是一种在特定时间和日期安排一次性任务的 Linux 终端方法. 计算机擅长自动化,但不是每个人都知道如何使自动化工作.不过,能够在特定的时间为电脑安排一个任务,然后忘记它,这确实是一种享受.也 ...

  5. 用 Linux 命令玩一个有趣的数学游戏

    在家玩流行的英国游戏节目 "Countdown" 中的数字游戏. 像许多人一样,我在大流行期间看了不少新的电视节目.我最近发现了一个英国的游戏节目,叫做 Countdown,参赛者 ...

  6. 面试官:请简述一下vue-cli命令行工具,你能自己手写一个吗?

    还记得我们在写vue 项目的时候用脚手架vue-init的主要作用是根据指定模板生成项目原型嘛?那么vue-init怎么实现的呢? 其实就是在vue-cli package.json中增加下面的代码 ...

  7. 教你写一个可以找到.m文件所有接口名的命令行工具

    项目github 出发点 今天工作中写了一个工具类,在.m中完成所有功能后,发觉把所有接口从.m中拷贝到.h中声明,好麻烦啊,所以就考虑写个命令行工具来做这些工作. 想要达到的结果 我们设计这个小工具 ...

  8. 自己写的python软件可以在哪发布-如何发布一个Python命令行工具

    本文简介 上次写的一个终端里面斗鱼TV弹幕Python版本和Ruby版本,并且发布到PIP和RubyGems上面.在发布PIP包的时候,居然Google不到一篇可以非常好的讲解这个流程的文章.于是整理 ...

  9. 第三方模块——nodemon是一个命令行工具,用以辅助项目开发、nrm ( npm registry manager ):npm下载地址切换工具

    什么是第三方模块 别人写好的.具有特定功能的.我们能直接使用的模块即第三方模块,由于第三方模块通常都是由多个文件组成并且被放置在一个文件夹中,所以又名包. 第三方模块 nodemon nodemon是 ...

最新文章

  1. [20160608]自治事务引起死锁.txt
  2. IBM 数据科学平台三大特性解决数据科学家协作问题
  3. 网络编程 TCP学习
  4. IT经理世界:专注莫如史玉柱
  5. idea安装Maven Helper
  6. fedora 使用 vnc 远程 fedora 28 主机
  7. R语言观察日志(part12)--关于.Rprofile文件
  8. js怎么把函数字符串转成函数_字符串处理函数
  9. mysql 数据修改记录日志_mysql对数据的更新操作记录在哪个日志中?
  10. linux下vim 选择文本,删除,复制,粘贴
  11. 查找php中的内容,如何通过PHP从内容中查找URL?
  12. css中的clip属性rect(top,right,bottom,left);
  13. 华为mate20云备份恢复卡住了_注意了!包括华为、荣耀在内的14款老机型开启EMUI11公测了...
  14. C语言小案例_关于爱普生喷墨机APG复位错误(APG reset error)的最终答案: 故障案例 每日一例 【第1358篇】...
  15. Unity3D 视频教程列表,共 91 套!
  16. Windows Server 2008 R2 企业版操作说明手册
  17. .axf文件_「嵌入式笔记」hex文件、bin文件、axf文件的区别?
  18. 【Docker】安装-win7
  19. 在线的图片颗粒化效果实现
  20. 《勇士传说》横版卷轴动作类游戏笔记目录

热门文章

  1. 倍增:st表(模板)(洛谷P3865)
  2. nssl1167-桐人的约会【最短路】
  3. P1306-斐波那契公约数【矩阵乘法,数论】
  4. 线段树初见——区间询问与改变最大值
  5. [BZOJ5312]冒险(势能线段树)
  6. 牛客网暑期ACM多校训练营(第三场)
  7. 洛谷-P3396 哈希冲突 分块
  8. 19、mysql中定时器的创建和使用
  9. TCP 三次握手原理,你真的理解吗
  10. mybatis入门(四)之动态SQL