java指令工具_jvm 指令工具 jcmd 命令(Java多功能命令行)

jcmd 命令

在 jdk1.7 之后,新增了一个命令行工具jcmd,它是一个多功能工具,用它可以导出堆,查看java进程,导出线程信息,执行GC等。jcmd能将命令发送给正在运行的JVM,诊断运行中的java应用。

jcmd程序须运行在与JVM相同机器上,需拥有与JVM相同的权限。

jcmd程序可在已运行的JVM中,动态地与Java飞行记录器(JFR)交互。

如果,应用程序已处于停止响应状态,则可使用jcmd命令进行数据收集工作,如:收集堆栈信息:jcmd  Thread.print。

jcmd 语法jcmd [-l|-h|-help]

jcmd pid|main-class PerfCounter.print

jcmd pid|main-class -f filename

jcmd pid|main-class command[ arguments]

1、帮助➜  kc_script jcmd -h

Usage: jcmd  

or: jcmd -l

or: jcmd -h

command must be a valid jcmd command for the selected jvm.

Use the command "help" to see which commands are available.

If the pid is 0, commands will be sent to all Java processes.

The main class argument will be used to match (either partially

or fully) the class used to start Java.

If no options are given, lists Java processes (same as -p).

PerfCounter.print display the counters exposed by this process

-f  read and execute commands from the file

-l  list JVM processes on the local machine

-h  this help

说明-f:从文件中读取并执行命令

-l:本地机器上列出jvm的进程

-h:帮助

2、列出虚拟机

命令:jcmd -l

列出本机所有的虚拟机。[root@searching-search-service-7cbfd67967-lczgh /]# jcmd -l

19 org.apache.catalina.startup.Bootstrap start

3662 sun.tools.jcmd.JCmd -l

3、查看jcmd支持的命令

命令:jcmd help

列出pid对应虚拟机所支持的命令。[root@searching-search-service-7cbfd67967-lczgh /]# jcmd 19 help

19:

The following commands are available:

JFR.stop                        # java飞行记录器 停止

JFR.start                       # java飞行记录器 开始

JFR.dump                        # java飞行记录器 dump

JFR.check                       # java飞行记录器 检查

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堆dump

GC.run_finalization             # gc运行结束

GC.run                          # gc运行

VM.uptime                       # 虚拟机运行时间单位 秒

VM.flags                        # 虚拟机信息

VM.system_properties            # 虚拟机系统配置

VM.command_line                 # 虚拟机命令行

VM.version                      # 虚拟机版本

help

For more information about a specific command use 'help '.

然后挑选出虚拟机支持的任意命令执行:jcmd pid xxx;

如果需要对特定的命令进行帮助说明,可以在 help 之后加上命令名。# 查询内容

[root@searching-search-service-7cbfd67967-lczgh /]# jcmd 19 VM.version

19:

Java HotSpot(TM) 64-Bit Server VM version 25.161-b12

JDK 8.0_161

# 查询帮助

[root@searching-search-service-7cbfd67967-lczgh /]# jcmd 19 help VM.version

19:

VM.version

Print JVM version information.

Impact: Low

Permission: java.util.PropertyPermission(java.vm.version, read)

Syntax: VM.version

帮助信息包含了命令的含义、影响、权限、语法等信息。

4、生成堆dump

命令:jcmd GC.heap_dump filepath

很多时候我们需要生成dump,再使用特定工具去详细进行分析(例如VisualVm)。

之前说过的 jmap 同样可以生成dump文件,Oracle 推荐使用 jcmd。# 生成文件

[root@searching-search-service-7cbfd67967-lczgh /]# jcmd 19 GC.heap_dump gc.hprof

19:

Heap dump file created

# 查看文件大小

[root@searching-search-service-7cbfd67967-lczgh /]# ll -h

-rw-------    1 root root 187M 1月  27 19:08 gc.hprof

5、生成类直方图

命令:jcmd GC.class_histogram

类直方图是一个较为直观的状态去查看内存分布的情况。

与jmap -histo 效果相同,推荐使用jcmd工具。

另外jhat也可以分析出类直方图# 导出到文件

[root@searching-search-service-7cbfd67967-lczgh /]# jcmd 19 GC.class_histogram > tmp.log

# 查看文件

[root@searching-search-service-7cbfd67967-lczgh /]# more tmp.log

19:

num     #instances         #bytes  class name

----------------------------------------------

1:         12844       94591240  [B

2:        145686       20808208  [C

3:         25526        8967192  [Ljava.lang.Object;

4:        142502        3420048  java.lang.String

5:          3276        2149056  io.netty.util.internal.shaded.org.jctools.queues.MpscArrayQueue

6:         16175        1795488  java.lang.Class

7:         52844        1691008  java.util.concurrent.ConcurrentHashMap$Node

8:         15177        1335576  java.lang.reflect.Method

9:         38339        1226848  java.util.HashMap$Node

10:           243         982864  [Ljava.nio.ByteBuffer;

11:          8322         829632  [I

12:           232         664304  [Ljava.nio.channels.SelectionKey;

13:          6106         657016  [Ljava.util.HashMap$Node;

14:         13629         654192  java.util.HashMap

15:           914         467192  [Ljava.util.concurrent.ConcurrentHashMap$Node;

16:          1229         462104  java.lang.Thread

17:         26228         419648  java.lang.Object

6、打印线程状态

有时候我们的应用程序会产生死锁或者频繁争抢资源的情况,那么就可以通过打印线程状态来详细分析各个线程的执行状态。jstack 

jcmd  Thread.print

故障排除

jcmd程序提供如下故障排除选项:

1、录制记录(Start a recording)

示例:在指定Java进程(19)上开始2分钟记录,并保存到当前目录的my-recording.jfr文件中。[root@searching-search-service-7cbfd67967-lczgh /]# jcmd 19 JFR.start name=MyRecording settings=profile delay=20s duration=2m filename=tmp/my-recording.jfr

19:

Java Flight Recorder not enabled.

Use VM.unlock_commercial_features to enable.

如果没有开启会有提示,使用 VM.unlock_commercial_features 开启,在VM options 添加: -XX:+UnlockCommercialFeatures。

2、检查记录(Check a recording)

JFR.check检查正在运行的记录,如:jcmd 19 JFR.check

3、停止记录(Stop a recording)

JFR.stop命令停止正在运行的记录,如:jcmd 19 JFR.stop

4、转储记录(Dump a recording)

JFR.dump命令停止正在运行的录制,并将记录存储到record文件,如:jcmd 19 JFR.dump name=MyRecording filename=tmp/my-recording.jfr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为什么要学JVM1、一切JAVA代码都运在JVM之上,只有深入理解虚拟机才能写出更强大的代码,解决更深层次的问题。2、JVM是迈向高级工程师、架构师的必备技能,也是高薪、高职位的不二选择。3、同时,JVM又是各大软件公司笔试、面试的重中之重,据统计,头部的30家互利网公司,均将JVM作为笔试面试的内容之一。4、JVM内容庞大、并且复杂难学,通过视频学习是最快速的学习手段。课程介绍本课程包含11个大章节,总计102课时,无论是笔试、面试,还是日常工作,可以让您游刃有余。第1章 基础入门,从JVM是什么开始讲起,理解JDK、JRE、JVM的关系,java的编译流程和执流程,让您轻松入门。第2章 字节码文件,深入剖析字节码文件的全部组成结构,以及javap和jbe可视化反解析工具的使用。第3章 类的加载、解释、编译,本章节带你深入理解类加载器的分类、范围、双亲委托策略,自己手写类加载器,理解字节码解释器、即时编译器、混合模式、热点代码检测、分层编译等核心知识。第4章 内存模型,本章节涵盖JVM内存模型的全部内容,程序计数器、虚拟机栈、本地方法栈、方法区、永久代、元空间等全部内容。第5章 对象模型,本章节带你深入理解对象的创建过程、内存分配的方法、让你不再稀里糊涂。第6章 GC基础,本章节是垃圾回收的入门章节,带你了解GC回收的标准是什么,什么是可达性分析、安全点、安全区,四种引用类型的使用和区别等等。第7章 GC算法与收集器,本章节是垃圾回收的重点,掌握各种垃圾回收算法,分代收集策略,7种垃圾回收器的原理和使用,垃圾回收器的组合及分代收集等。第8章 GC日志详解,各种垃圾回收器的日志都是不同的,怎么样读懂各种垃圾回收日志就是本章节的内容。第9章 性能监控与故障排除,本章节实战学习jcmd、jmx、jconsul、jvisualvm、JMC、jps、jstatd、jmap、jstack、jinfo、jprofile、jhat总计12种性能监控和故障排查工具的使用。第10章 阿里巴巴Arthas在线诊断工具,这是一个特别小惊喜,教您怎样使用当前最火热的arthas调优工具,在线诊断各种JVM问题。第11章 故障排除,本章会使用实际案例讲解单点故障、高并发和垃圾回收导致的CPU过高的问题,怎样排查和解决它们。课程资料课程附带配套项目源码2个159页高清PDF理论篇课件1份89页高清PDF实战篇课件1份Unsafe源码PDF课件1份class_stats字段说明PDF文件1份jcmd Thread.print解析说明文件1份JProfiler内存工具说明文件1份字节码可视化解析工具1份GC日志可视化工具1份命令工具cmder 1份学习方法理论篇部分推荐每天学习2课时,可以在公交地铁上用手机进学习。实战篇部分推荐对照视频,使用配套源码,一边练习一遍学习。课程内容较多,不要一次性学太多,而是要循序渐进,坚持学习。      

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值