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

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 ,只需简单地运行不带任何参数的命令即可,如下面的屏幕快照所示。

201602-jcmdLists进程

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

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

201602-jcmd帮助

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

201602-jcmListsProcessesLOption

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

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

201602-jcmdHelpJvmProcess

上一个屏幕快照展示了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时。

201602-jcmd-moreCmdsOnDifferentVMInstance

通过比较最后两个屏幕快照,可以清楚地看出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

201602-jcmdHelpThread打印

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

201602-jcmdThreadPrint开始

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

201602-jcmd-vm-version-uptime

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

201602-jcmd-vm-命令行

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

201602-jcmd-vm-flags

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

201602-jcmd-vm-system-properties

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

201602-jcmd-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进程的屏幕快照中显示了该快照:

201602-jcmd-classloader-stats

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

201602-jcmd-vm-class-hierarchy

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

201602-jcmd-vm-dynlibs

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

201602-jcmd-vm-info

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

201602-jcmd-vm-stringtable-symboltable

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

201602-jcmd-compiler-directives-print

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

201602-jcmd-gc-run

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

201602-jcmd-gc-class直方图

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

201602-jcmd-heapDump

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

201602-jcmd-jat

201602-jcmd-heapdump-web

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

201602-jcmdClassStatsNA

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

201602-jcmd-class-stats-displayed

这篇文章介绍了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 命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【流媒体FLV封装协议】

FLV封装格式介绍及解析 FLV封装格式 FLV(Flash Video)是Adobe公司推出的一种流媒体格式&#xff0c;由于其封装后的音视频文件体积小、封装简单等特点&#xff0c;非常适合于互联网上使用。目前主流的视频网站基本都支持FLV。采用FLV格式封装的文件后缀为.flv。 FLV封装格式…

python画统计图代码_Python使用统计函数绘制简单图形实例代码

前言 Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用&#xff0c;提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用&#xff0c;如 PyQt 和 wxPython。 用matplotlib绘制一些大家比较熟悉又经常混淆的统计图形&#xff0c;掌握这些统计图形可以对…

linux系统打开m3u8文件,M3U8 文件扩展名: 它是什么以及如何打开它?

M3U8 疑难解答打开 M3U8 文件过程中所遇到的常见问题Microsoft Windows Media Player 已删除尝试打开 M3U8 文件时&#xff0c;您收到错误 “无法打开 M3U8 文件类型”。 通常&#xff0c;%%os%% 中会出现这种情况&#xff0c;因为 Microsoft Windows Media Player 未安装在你的…

r语言 C4.5 剪枝是用什么算法_决策树,逻辑回归,PCA算法面经

目录决策树简述决策树原理&#xff1f;为什么要对决策树进行减枝&#xff1f;如何进行减枝&#xff1f;简述决策树的生成策略PCA简述主成分分析PCA工作原理&#xff0c;以及PCA的优缺点&#xff1f;PCA中有第一主成分、第二主成分&#xff0c;它们分别是什么&#xff0c;又是如…

视图中::text_新CalendarFX视图:MonthGridView!

视图中::text我和我的团队最近开始为CalendarFX创建新视图&#xff0c;其最初目标是在垂直栏中显示整年。 该视图的名称是MonthGridView。 与往常一样&#xff0c;编码时目标略有变化。 该视图现在可以显示任意数量的月份&#xff0c;并且可以在前面或后面添加额外的月份。 现在…

linux 内核 性能,Linux内核十个版本性能对比

【IT168 评论】从2008年1月底至今&#xff0c;Linux Kernel系统内核已经先后升级了十次&#xff0c;版本号也从2.6.24上升到2.6.33&#xff0c;并且下个版本2.6.34也已进入开发阶段。今天我们就看看过去两年内这十个版本在性能上有何差异。测试平台是一套工作站系统&#xff0c…

应用程序缓存_应用程序模块和实体缓存

应用程序缓存任何具有ADF业务组件基础知识的ADF开发人员都应该熟悉下图&#xff1a; 它代表运行时ADF业务组件的核心构建块。 有一个包含视图对象实例的根应用程序模块实例。 视图对象实例可能由存储在实体集合或换句话说就是实体缓存中的实体对象备份。 根应用程序模块可能还…

【开源项目】超级播放器1.0

面向对象开发的五大基本原则 单一职责 各个模块相对独立&#xff0c;优点一&#xff1a;在修改其中某个模块的时候不会对其他模块造成影响&#xff1b;优点二&#xff1a;可以对各个模块进行单独的测试&#xff1b;例如解封装模块和解码模块相互独立设计。 开闭原则 对扩展…

linux c 数据写入硬盘分区,Linux操作篇之分区/磁盘扩容(一)

在实际工作中&#xff0c;系统的运行会产生大量的日志 、临时、以及生产文件等数据。所以对磁盘空间也是有一定要求的。但在前期工作中&#xff0c;可能不会需要太大的空间&#xff0c;但是随着后期的使用&#xff0c;存储空间需求很大。这个时候进行扩容就可以了。一般情况下&…

js mztreeview 双击事件_Mac下的Node.js安装教程

前言更多详情&#xff0c;请访问我的 个人博客。什么是Node.jsNodeJS官网上的介绍&#xff1a;Node.js is a platform built on Chromes JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model …

visual2019没有勾选的在如何加入_发票管理系统完成升级,勾选认证平台改头换面,你所有的问题都在这里!...

发票系统2.0版上线为了进一步优化增值税发票系统&#xff0c;提高用户体验&#xff0c;根据国家税务总局安排部署&#xff0c;我省将于2019年11月1日对增值税发票管理系统进行全面升级改造为增值税发票管理系统2.0版。增值税发票综合服务平台是现有增值税发票选择确认平台的升级…

linux 多线程实现倒计时,Linux用脚本实现“时分秒“倒计时功能

1.怎样实现“时分秒“倒计时在Linux下&#xff0c;脚本的完成相对于C语言来说稍微随意一点&#xff0c;可以按照字的想法写&#xff0c;只要有逻辑就可以了。示例&#xff1a;注意&#xff1a;clean的功能这个命令将会刷新屏幕&#xff0c;本质上只是让终端显示页向后翻了一页&…

百分比单位始终根据父元素相应值来计算_CSS Viewport 单位,很多人还不知道使用它来快速布局!...

**CSS Viewport units(视口单位)**在过去几年已经出现了&#xff0c;随着时间的推移&#xff0c;越来越多的开发人员开始使用它们。它们的好处在于为我们提供了一种不需要使用J avaScript 就能以动态的方式调整大小的方法。而且&#xff0c;如果它失效&#xff0c;也有很多备用…

linux macos 界面对比,GNOME 3与Mac OS X 10.7 (Lion)的纵览模式比较

在Twitter上与ibuick同学聊了一些Mac OS X新的设计&#xff0c;还有GNOME等。我突然意识到&#xff0c;Apple并不是引领一切的&#xff0c;很多方面&#xff0c;它甚至是向Linux下的GNOME、KDE学来的(比如出现于Leopard的Space)。更有意思的是&#xff0c;前些日子我刚玩过最新…

【音视频安卓开发 (四)】AndroidStudio项目配置权限、jni库路径、ABI

读写权限 权限(版本) 添加jni用到库所在的路径 设置cmake和NDK参数 cmake项目配置

犀牛重建曲面_【教程】Rhino犀牛面包机建模教学(含模型领取)

建模渲染教学视频可关注◾B站&#xff1a;卓尔谟工业设计小站&#xff1b;◾视频号&#xff1a;学犀牛网校教程&#xff1a;戎尚老师 / 编辑&#xff1a;老白建模步骤01、导入背景&#xff0c;画出面包机半边弧线并镜像&#xff1b;02、对照侧视图高度&#xff0c;用线拉成体&a…

selenium架构_Selenium测试的干净架构

selenium架构在此博客文章中&#xff0c;我想介绍一种具有最佳设计模式的Selenium测试的简洁架构&#xff1a;页面对象&#xff0c;页面元素&#xff08;通常称为HTML包装器&#xff09;以及自行开发的非常小巧的框架。 该体系结构不限于示例中使用的Java&#xff0c;也可以以任…

C++ 【随想录】(四)【Makefile】

编译流程 预处理 gcc -E test.c -o test.i test.c源码进行预处理&#xff0c;预处理后停止编译,预处理后文件体积会变大&#xff0c;且为文本格式 编译 gcc -S test.i -o test.s 编译预处理的文件 汇编 gcc -c test.s -o test.o .s转成二进制文件 链接 gcc te…

mfc从文件中读取数据_Python 中的 bytes、str 以及 unicode 区别

从Python发展历史谈起Python3和Python2表示字符序列的方式有所不同。Python3字符序列的两种表示为byte和str。前者的实例包含原始的8位值&#xff0c;即原始的字节&#xff1b;后者的实例包括Unicode字符。Python2字符序列的两种表示为str和unicode。与Python3不同的是&#xf…