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

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

在使用大多数JDK命令行工具(包括jcmd )时,标识要为其使用命令行工具的Java进程的进程ID(pid)通常很重要。 只需运行不带任何参数的命令,使用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 ,可能会获得不同的可用命令列表。 下一个屏幕快照中jcmd 1216 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屏幕快照中说明了jcmd

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标志启动的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

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

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

相关文章

普通java程序怎样用cron_java – Spring cron vs普通cron?

我正在尝试在遗留的Java / Spring / Hibernate项目中使用cron作业,所以我决定使用spring调度程序.我希望myTask.doStuff在每个月的第一个星期日的12:00运行.在我的application-context.xml中,我已经将我的任务调度程序配置为&#xff1a;问题cron表达本身是&#xff1a;0 0 12&…

ansible-playbook实操之一键搭建lnmp+wordpress

目录 1、架构和准备&#xff1a; 2、配置nginx角色&#xff1a; 3、配置mariadb角色&#xff1a; 4、配置php角色&#xff1a; 5、配置完之后&#xff0c;写脚本调用roles 6、配置完之后浏览器搭建wordpress&#xff1a; 1、架构和准备&#xff1a; 操控节点&#xff1a;…

pivot 与 unpivot 函数是SQL05新提供的2个函数

pivot 与 unpivot 函数是SQL05新提供的2个函数 ------------------------------------------------------------------------------ pivot函数&#xff1a; create table test(id int,name varchar(20),quarter int,profile int)insert into test values(1,a,1,1000)insert i…

java职业教育考试题_Java认证考试中Java构造方法题目解答

【Java认证考试中Java构造方法题目解答】java中&#xff0c;在创建一个新的对象的时候&#xff0c;会调用其父亲的构造方法&#xff0c;测试程序如下&#xff1a;class parent{int a5;public parent(){System.out.println("a"a);System.out.println("parent()&q…

jsf集成spring_Spring和JSF集成:异常处理

jsf集成spring大多数JSF开发人员都会熟悉“发生错误”页面&#xff0c;当在他们的代码某处引发意外异常时&#xff0c;该页面就会显示。 该页面在开发时确实很有用&#xff0c;但对于生产应用程序通常不是您想要的。 通常&#xff0c;在使用库存JSF替换此页面时&#xff0c;通常…

python SimpleHTTPServer 快速共享文件

简单介绍 通过一个python命令快速共享文件给他人。 操作步骤 1、打开cmd命令行&#xff0c;切换到需要共享文件的目录&#xff0c;执行命令 python -m SimpleHTTPServer 。 2、打开浏览器&#xff0c;在地址栏中输入http://10.10.11.164:8000或者http://localhost:8000/可以看到…

mysql数据库设计实现工作流_工作流activiti部署到数据库(1)

1.工作流定义(workflow):指"业务过程的部分或整体在计算机应用环境下的自动化".普通框架要有一个请假单,要有一个字段来标识请假单的状态,至少有三个,还有请假单的状态是走到那个经理审批还是老板审批,这个时候不便管理.BPM:业务流程管理框架,是用来管理流程的框架.B…

Java EE安全性API向前发展

Java EE安全API&#xff08; JSR 375 &#xff09;正在向前发展&#xff0c;正如Arjan Tijms在此处概述的那样 &#xff1a; http : //arjan-tijms.omnifaces.org/p/whats-new-in-java-ee-security-api-10 。 html 。 需要注意的一件事是&#xff0c;我们现在为参考实现有了一…

程序员应该多逛的几个技术网站

1、stack overflow 2、github 3、csdn 4、osChina 5、xitu.io 6、www.infoQ.com 7、www.ctolib.com 8、慕课 9、知乎 10、博客园 转载于:https://www.cnblogs.com/qq666666/p/7439705.html

abd.exe 需要下java吗_Abd.exe文件下载|

abd.exe在哪个位置&#xff1f;abd.exe是一款很重要的电脑文件&#xff0c;如果这个文件丢失了&#xff0c;电脑部分程序将会无法正常运行&#xff0c;所以大家应该重视这类文件&#xff0c;小编已经将这个文件打包好了&#xff0c;欢迎大家来当易网下载。exe文件简介EXE File …

resteasy_RESTEasy教程第1部分:基础

resteasyRESTEasy是来自JBoss / RedHat的JAX-RS实现&#xff0c;并且内置于JBoss 6之后。 在这里&#xff0c;我将向您展示如何使用RESTEasy和JBossAS7.1.1.FINAL开发一个简单的RESTful Web服务应用程序。 步骤&#xff03;1&#xff1a;使用Maven配置RESTEasy依赖项。 <pro…

Spark面对OOM问题的解决方法及优化总结 (转载)

Spark面对OOM问题的解决方法及优化总结 (转载) 转载地址&#xff1a; http://blog.csdn.net/yhb315279058/article/details/51035631 Spark中的OOM问题不外乎以下两种情况map执行中内存溢出shuffle后内存溢出map执行中内存溢出代表了所有map类型的操作&#xff0c;包括&#xf…

java数据抽取到数据仓库_关于数据增量抽取的模拟实现——脚本实现

具体排过版的请参看http://Percywang.itpub.net本文主要是针对关于数据增量抽取的模拟实现——原理进行实现的实现的环境&#xff1a;业务数据库&#xff1a;Oracle9i数据仓库数据库&#xff1a;SQLServer20001、前提SQLServer服务器已经安装Oracle驱动&#xff0c;不再详细累述…

通过此注释改善您的JUnit体验

JUnit可能是所有Java项目中90&#xff05;的一部分。 令人兴奋的是&#xff0c;我们很快将拥有支持Java 8的JUnit 5 。 我们最近在博客上发表了一项改进 。 回到JUnit 4领域&#xff0c;有一个小技巧&#xff0c;我只能建议您进行所有单元测试。 只需在此处添加这个小注释&…

HDU 3555 Bomb (数位DP)

数位dp,主要用来解决统计满足某类特殊关系或有某些特点的区间内的数的个数&#xff0c;它是按位来进行计数统计的&#xff0c;可以保存子状态&#xff0c;速度较快。数位dp做多了后&#xff0c;套路基本上都差不多&#xff0c;关键把要保存的状态给抽象出来&#xff0c;保存下来…

java rsa 117_java实现RSA非对称加密解密

之前写过一篇java实现AES对称加密解密在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合。原理就是后台生成一对公钥和私钥&#xff0c;公钥给前端用来加密&#xff0c;后台用私钥去解密&#xff0c;保证了传输过程中就算被截获也避免密码泄露。下面是代码&#xff1a…

CodeForces 731C Socks

//并查集的应用 #include <bits/stdc.h> using namespace std; const int N 2e5 5; int f[N]; int color[N]; vector<int>num[N]; int findx(int x) {return ( x f[x]? x: f[x] findx(f[x]) ); } void merge(int x, int y) {int fx findx(x);int fy findx(y…

php多条件筛选顺序_php多条件组合筛选

【实例简介】js搞定多条件组合筛选&#xff0c;实现URL动态变化&#xff0c;后台根据URL参数实现查询【实例截图】【核心代码】filter└── filter├── css│ ├── bootstrap.css│ ├── bootstrap.css.map│ ├── bootstrap.min.css│ ├── bootstrap-resp…

jdeveloper_JDeveloper中的Java反编译器

jdeveloperJava Decompiler是一个独立的图形实用程序&#xff0c;显示“ .class”文件的Java源代码。 下面是Java Decompiler程序的快照 您可以从这里下载该程序 我将说明如何在Jdeveloper中将此程序用作外部工具 Java Decompiler和Jdeveloper之间的集成 您可以将此程序添加…

文件上传 java 完美,vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData())...

vuejava实现文件上传(excel等)&#xff0c;会出现跨域问题&#xff0c;直接用form表单提交就不会有问题了(new FormData())地址&#xff1a;https://www.cnblogs.com/muscles/p/9503103.html一&#xff1a;首先说一下什么是跨域&#xff0c;跨域就是解决浏览器同源策略的问题。…