JVM常见命令行及图形工具

本文介绍了JVM的各种监控和分析工具,包括JDK命令行工具如jps、jstat、jinfo、jmap、jhat、jstack和jcmd,以及可视化工具如JConsole、VisualVM、VisualGC和JMC。这些工具能够帮助开发者实时查看和调整Java进程的各项参数,监视内存、线程和GC状态,分析堆转储文件,定位性能问题和死锁,是Java开发和运维的重要助手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章后续更改会放置于:https://github.com/zgkaii/CS-Study-Notes,欢迎批评指正!

JDK 命令行工具

这些命令在 JDK 安装目录下的 bin 目录下:

工具 简介
java Java应用启动程序
javac JDK 内置的编译工具
javap 反编译 class 文件的工具
javadoc 根据 Java 代码和标准注释,自动生成相关的 API 说明文档
javah JNI 开发时, 根据 java 代码生成需要的 .h文件
extcheck 检查某个 jar 文件和运行时扩展 jar 有没有版本冲突,很少使用
jdb Java Debugger ; 可以调试本地和远端程序,属于 JPDA 中的一个 demo 实现,供其 他调试器参考。开发时很少使用
jdeps 探测 class 或 jar 包需要的依赖
jar 打包工具,可以将文件和目录打包成为 .jar 文件;.jar 文件本质上就是 zip 文件,只 是后缀不同。使用时按顺序对应好选项和参数即可。
keytool 安全证书和密钥的管理工具; (支持生成、导入、导出等操作)
jarsigner JAR 文件签名和验证工具
policytool 实际上这是一款图形界面工具, 管理本机的 Java 安全策略
jps/jinfo 查看 java 进程
jstat 查看 JVM 内部 gc 相关信息
jmap 查看 heap 或类占用空间统计
jstack 查看线程信息
jhat 用于分析 heapdump 文件,它会建立一个 HTTP/HTML 服务器,让用户可以在浏览器上查看分析结果;
jcmd 执行 JVM 相关分析命令(整合命令)
jrunscript/jjs 执行 js 命令
  • jps (JVM Process Status): 类似 UNIX 的 ps 命令。
  • jstat( JVM Statistics Monitoring Tool): 用于收集 HotSpot 虚拟机各方面的运行数据;
  • jinfo (Configuration Info for Java) :Configuration Info forJava,显示虚拟机配置信息;
  • jmap (Memory Map for Java) :生成堆转储快照;
  • jhat (JVM Heap Dump Browser ) :用于分析 heapdump 文件,它会建立一个 HTTP/HTML 服务器,让用户可以在浏览器上查看分析结果;
  • jstack (Stack Trace for Java) :生成虚拟机当前时刻的线程快照,线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合。

jps:查看所有 Java 进程

jps (JVM Process Status)命令类似 UNIX 的 ps 命令。用于查看所有 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息;

jps:显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一 ID(Local Virtual Machine Identifier, LVMID)。

jps -q :只输出进程的本地虚拟机唯一 ID。

C:\Users\kaiz1>jps
12724 Jps
10296 Launcher
10792
11816 RemoteMavenServer36
2848 ThreadTest

jps -l:输出主类的全名,如果进程执行的是 Jar 包,输出 Jar 路径。

C:\Users\kaiz1>jps -l
18832 org.jetbrains.jps.cmdline.Launcher
2512 sun.tools.jps.Jps
5520 org.zgkaii.java8.ThreadTest
10792
11816 org.jetbrains.idea.maven.server.RemoteMavenServer36

jps -v:输出虚拟机进程启动时 JVM 参数。

jps -m:输出传递给 Java 进程 main() 函数的参数。
jps -mlv: 打印Java 各个进程的详尽参数。

jinfo:实时地查看和调整虚拟机各项参数

jinfo vmid :输出当前 jvm 进程的全部参数和系统属性 (第一部分是系统的属性,第二部分是 JVM 的参数)。

jinfo -flag name vmid :输出对应名称的参数的具体值。比如输出 MaxHeapSize、查看当前 jvm 进程是否开启打印 GC 日志 ( -XX:PrintGCDetails :详细 GC 日志模式,这两个都是默认关闭的)。

C:\Users\kaiz1>jinfo -flag MaxHeapSize 2848
-XX:MaxHeapSize=4236247040

C:\Users\kaiz1>jinfo -flag PrintGC 2848
-XX:-PrintGC

使用 jinfo 可以在不重启虚拟机的情况下,可以动态的修改 jvm 的参数。尤其在线上的环境特别有用,请看下面的例子:

jinfo -flag [+|-]name vmid 开启或者关闭对应名称的参数。

C:\Users\kaiz1>jinfo -flag PrintGC 2848
-XX:-PrintGC

C:\Users\kaiz1>jinfo -flag +PrintGC 2848

C:\Users\kaiz1>jinfo -flag PrintGC 2848

jstat:监视虚拟机各种运行状态信息

jstat(JVM Statistics Monitoring Tool) 使用于监视虚拟机各种运行状态信息的命令行工具。 它可以显示本地或者远程(需要远程主机提供 RMI 支持)虚拟机进程中的类信息、内存、垃圾收集、JIT 编译等运行数据,在没有 GUI,只提供了纯文本控制台环境的服务器上,它将是运行期间定位虚拟机性能问题的首选工具。

jstat 命令使用格式:

jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

比如 jstat -gc -h3 2848 1000 10表示分析进程 id 为 2848 的 gc 情况,每隔 1000ms 打印一次记录,打印 10 次停止,每 3 行后打印指标头部。

常见的 option 如下:

  • jstat -class vmid :类加载(Class loader)信息统计;
  • jstat -compiler vmid :JIT 即时编译器相关的统计信息;
  • jstat -gc vmid :GC 相关的堆内存信息;
  • jstat -gccapacity vmid : 各个内存池分代空间的容量;
  • jstat -gccause vmid:看上次 GC,本次 GC(如果正在 GC 中)的原因, 其他 输出和 -gcutil 选项一致
  • jstat -gcnew vmid :年轻代的统计信息(New = Young = Eden + S0 + S1);
  • jstat -gcnewcapcacity vmid :年轻代空间大小统计;
  • jstat -gcold vmid :老年代和元数据区的行为统计;
  • jstat -gcoldcapacity vmid :显示老年代的大小;
  • jstat -gcpermcapacity vmid :显示永久代大小;
  • jstat -gcmetacapacity vmid: meta 区大小统计;
  • jstat -gcutil vmid :GC 相关区域的使用率(utilization)统计;

另外,加上 -t参数可以在输出信息上加一个 Timestamp 列,显示程序的运行时间。

使用演示

jsat -gcutil -t 2848 1000 1000:表示每隔1000ms打印一次2848进程的GC相关区域使用率,打印1000次结束。

C:\Users\kaiz1>jstat -gcutil -t 2848 1000 1000
Timestamp     S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
    435.4   0.00   0.00  12.00   0.63  78.98  82.02    188    0.096     0    0.000    0.096
    436.4   0.00   0.00  64.00   0.63  78.98  82.02    188    0.096   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值