[转帖]jcmd命令详解

jcmd,命令,详解 · 浏览次数 : 0

小编点评

**jcmd 工具简介** jcmd 是 Java 中一个新命令行工具,可用于获取目标 Java 进程的性能统计、JFR、内存使用、垃圾收集、线程堆栈、JVM 运行时间等信息。 **常用命令** - **jcmd -l:** 查看当前机器上所有的 jvm 进程信息。 - **jps -lm:** 列出当前运行的 java 进程可以执行的操作。 - **jcmd help:** 列出当前运行的 java 进程可以执行的操作。 - **jcmd GC.heap_info:** 查看 JVM内存信息。 - **jcmd PerfCounter.print:** 查看指定进程的性能统计信息。 - **VM.uptime:** 查看 JVM 的已启动时长。 - **GC.class_histogram:** 查看系统中类统计信息。 - **Thread.print:** 查看线程堆栈信息。 - **GC.heap_dump:** 查看 JVM 的Heap Dump。 - **VM.system_properties:** 查看 JVM 的属性信息。 - **VM.flags:** 查看 JVM 的启动参数。 - **GC.run_finalization:** 对 JVM 执行 java.lang.System.runFinalization()。 - **GC.run:** 对 JVM 执行 java.lang.System.gc()。 - **VM.version:** 查看目标jvm进程的版本信息。 - **VM.native_memory:** 查看目标jvm进程的Native Memory Tracking (NMT)信息。 **其他选项** - **-v:** 显示更多详细信息。 - **-v:** 显示详细的内存使用情况。 - **-v:** 显示详细的线程堆栈信息。

正文

1 基本知识

jcmd 是在 JDK1.7 以后,新增了一个命令行工具。

jcmd 是一个多功能的工具,相比 jstat 功能更为全面的工具,可用于获取目标 Java 进程的性能统计、JFR、内存使用、垃圾收集、线程堆栈、JVM 运行时间,也可以手动执行 GC、导出(TODO 能导出线程信息?)线程信息、堆信息等信息。

2 jcmd 用法

2.1 查看进程 jcmd -l

作用:查看 当前机器上所有的 jvm 进程信息。
同类作用的命令:jcmd、 jcmd -l 、 jps -lm 这三个命令作用相同

2.2、jps -lm

1255 org.tanukisoftware.wrapper.WrapperSimpleApp CloudResetPwdUpdateAgent
20399 /etc/java-app/springtest-0.0.1-SNAPSHOT.jar
5087 sun.tools.jps.Jps -lm

2.3 列出当前运行的 java 进程可以执行的操作【常用】

命令:jcmd help
作用:列出当前运行的 java 进程可以执行的操作

2.4 查看具体命令的选项

命令:jcmd help command
作用:列出当前运行的 java 进程可以执行的操作

2.5 查看内存信息【常用】

命令:jcmd GC.heap_info
作用:查看JVM内存信息,虽然名称为heap_info,但是除了堆内存信息,也会有堆外内存之一的Metaspace的信息。相比jstat命令结果会更直观一些。

2.6 查看性能统计信息

命令:jcmd PerfCounter.print
作用:查看指定进程的性能统计信息。

2.7 VM.uptime

命令:jcmd VM.uptime
作用:查看 JVM 的已启动时长。

2.8 GC.class_histogram【常用】

命令:jcmd GC.class_histogram
作用:查看系统中类统计信息。
同类作用的命令:和jmap -histo pid的效果是一样的,可以查看每个类的实例数量和占用空间大小。

2.9 Thread.print

命令:jcmd Thread.print
作用:查看线程堆栈信息。

同类作用的命令:和jstack -l作用一样

2.10 GC.heap_dump

命令:jcmd GC.heap_dump FILE_NAME
作用:查看 JVM 的Heap Dump。导出的 dump 文件,可以使用MAT 或者 Visual VM 等工具进行分析(如果只指定文件名,默认会生成在启动 JVM 的目录里)

同类作用的命令:和 jmap -dump:format=b,file=heapdump.phrof pid 作用一样

2.11 VM.system_properties

命令:jcmd VM.system_properties
作用:查看 JVM 的属性信息。

2.12 VM.flags

命令:jcmd VM.flags
作用:查看 JVM 的启动参数。

结果解析:
在这里插入图片描述

-XX:InitialHeapSize:初始堆大小。同-Xms
-XX:MaxHeapSize: 最大堆大小。 同-Xmx
-XX:MinHeapDeltaBytes: 表示当JVM决定是否要做或者尝试扩容的时候最小扩/缩多少,JDK1.8以下默认为192K,JDK1.8默认512K
-XX:newSize:表示新生代初始内存的大小
-XX:MaxNewSize:JVM堆区域新生代内存的最大可分配大小
-XX:OldSize:老生代的大小
-XX:+UseParallelGC:指 定在New Generation 使用 parallel collector垃圾收集器

-XX:CICompilerCount:最大并行编译数
-XX:+UseCompressedClassPointers:开启类指针压缩
-XX:+UseCompressedOops:开启普通对象指针压缩

    2.13 VM.command_line

    命令:jcmd VM.command_line
    作用:查看 JVM 的启动命令行。

    2.14 GC.run_finalization

    命令:jcmd GC.run_finalization
    作用: 对 JVM 执行 java.lang.System.runFinalization()。执行一次 finalization 操作,相当于执java.lang.System.runFinalization()。调用已经失去引用的对象的finalize方法,但是JVM可以选择执行或者不执行。

    2.15 GC.run

    命令:jcmd GC.run
    作用:对 JVM 执行 java.lang.System.gc()。同 GC.run_finalization 告诉垃圾收集器打算进行垃圾收集,但是JVM可以选择执行或者不执行。

    2.16 VM.version

    命令:jcmd VM.version
    作用:查看目标jvm进程的版本信息。

    2.17 VM.native_memory

    命令:jcmd VM.native_memory
    作用:查看目标jvm进程的Native Memory Tracking (NMT)信息,用于追踪JVM的内部内存使用。

    jcmd <pid> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]
    

    summary: 分类内存使用情况.

    detail: 详细内存使用情况,除了summary信息之外还包含了虚拟内存使用情况。

    baseline: 创建内存使用快照,方便和后面做对比

    summary.diff: 和上一次baseline的summary对比

    detail.diff: 和上一次baseline的detail对比

    shutdown: 关闭NMT

      更具体的使用方法参考:

      https://blog.csdn.net/superiorpengFight/article/details/109353633

      参考文章:https://www.jianshu.com/p/011f0e3a39ff

      文章知识点与官方知识档案匹配,可进一步学习相关知识
      Java技能树首页概览103332 人正在系统学习中

      与[转帖]jcmd命令详解相似的内容:

      [转帖]jcmd命令详解

      1 基本知识 jcmd 是在 JDK1.7 以后,新增了一个命令行工具。 jcmd 是一个多功能的工具,相比 jstat 功能更为全面的工具,可用于获取目标 Java 进程的性能统计、JFR、内存使用、垃圾收集、线程堆栈、JVM 运行时间,也可以手动执行 GC、导出(TODO 能导出线程信息?)线程

      [转帖]jcmd命令详解

      1 基本知识 jcmd 是在 JDK1.7 以后,新增了一个命令行工具。 jcmd 是一个多功能的工具,相比 jstat 功能更为全面的工具,可用于获取目标 Java 进程的性能统计、JFR、内存使用、垃圾收集、线程堆栈、JVM 运行时间,也可以手动执行 GC、导出(TODO 能导出线程信息?)线程

      [转帖]查看docker中运行的JVM参数问题及解决方法

      方法一、jcmd命令: 1、jps获取java的线程id 2、jcmd pidVM.flags获取 51152:-XX:CICompilerCount=3 -XX:InitialHeapSize=526385152 -XX:MaxHeapSize=1073741824 -XX:MaxNewSize=

      [转帖] JVM诊断命令jcmd介绍

      https://www.cnblogs.com/codelogs/p/16535451.html 简介# 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命令,如jps、jstack、jmap、jinfo等,并且jdk添加新的诊断功能,也会通过jcmd提供

      [转帖] JVM诊断命令jcmd介绍

      https://www.cnblogs.com/codelogs/p/16535451.html 简介# 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命令,如jps、jstack、jmap、jinfo等,并且jdk添加新的诊断功能,也会通过jcmd提供

      [转帖] JVM诊断命令jcmd介绍

      https://www.cnblogs.com/codelogs/p/16535451.html 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。 简介# 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命令,如jps、jst

      [转帖] JVM诊断命令jcmd介绍

      https://www.cnblogs.com/codelogs/p/16535451.html 简介# 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命令,如jps、jstack、jmap、jinfo等,并且jdk添加新的诊断功能,也会通过jcmd提供

      [转帖] JVM诊断命令jcmd介绍

      https://www.cnblogs.com/codelogs/p/16535451.html 简介# 从JDK7开始,jdk提供了一个方便扩展的诊断命令jcmd,用来取代之前比较分散的jdk基础命令,如jps、jstack、jmap、jinfo等,并且jdk添加新的诊断功能,也会通过jcmd提供

      [转帖]JVM-工具-jcmd

      http://events.jianshu.io/p/011f0e3a39ff 一、jcmd 用法 1.1 基本知识 jcmd 是在 JDK1.7 以后,新增了一个命令行工具。 jcmd 是一个多功能的工具,相比 jstat 功能更为全面的工具,可用于获取目标 Java 进程的性能统计、JFR、内存

      [转帖]JVM NativeMemoryTracking ;jcmd process_id VM.native_memory;Native memory tracking is not enabled

      目录 一、Native Memory Tracking (NMT) 是Hotspot VM用来分析VM内部内存使用情况的一个功能。我们可以利用jcmd(jdk自带)这个工具来访问NMT的数据。 1.Native memory tracking is not enabled 打开NMT 二、查看原生内