JDK内置命令行工具你了解吗?

492 阅读5分钟

这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

一、JDK命令行工具简介

工具简介
javaJava 应用的启动程序
javacJDK 内置的编译工具
javap反编译 class 文件的工具
javadoc根据 Java 代码和标准注释,自动生成相关的API说明文档
javahJNI 开发时, 根据 java 代码生成需要的 .h文件。
extcheck检查某个 jar 文件和运行时扩展 jar 有没有版本冲突,很少使用
jdbJava Debugger ; 可以调试本地和远端程序, 属于 JPDA 中的一个 demo 实现, 供其他调试器参考。开发时很少使用
jdeps探测 class 或 jar 包需要的依赖
jar打包工具,可以将文件和目录打包成为 .jar 文件;.jar 文件本质上就是 zip 文件,只是后缀不同。使用时按顺序对应好选项和参数即可。
keytool安全证书和密钥的管理工具; (支持生成、导入、导出等操作)
jarsignerJAR 文件签名和验证工具
policytool实际上这是一款图形界面工具, 管理本机的 Java 安全策略
jps/jinfo查看 java 进程
jstat查看 JVM 内部 gc 相关信息
jmap查看 heap 或类占用空间统计
jstack查看线程信息
jcmd执行 JVM 相关分析命令(整合命令)
jrunscript/jjs执行 js命令

二、部分重要命令行工具详细介绍

1、jps命令

  jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写。非常简单实用。 用法: image.png

参数干嘛的
-q只输出进程 ID
-m输出传入 main 方法的参数
-l输出完全的包名,应用主类名,jar的完全路径名
-v输出jvm参数
-V输出通过flag文件传递到JVM中的参数
hostid查看远程服务上的 jvm 进程信息

一般lmv组合使用,显示java进程详细信息:

image.png

2、jstat命令

jstat命令命令格式:

jstat [Options] vmid [interval] [count]

命令参数说明:

Options,一般使用 -gcutil 或 -gc 查看gc 情况
pid,当前运行的 java进程号
interval,间隔时间,单位为秒或者毫秒
count,打印次数,如果缺省则打印无数次

Options 参数如下:

-gc:统计 jdk gc时 heap信息,以使用空间字节数表示
-gcutil:统计 gc时, heap情况,以使用空间的百分比表示
-class:统计 class loader行为信息
-compile:统计编译行为信息
-gccapacity:统计不同 generations(新生代,老年代,持久代)的 heap容量情况
-gccause:统计引起 gc的事件
-gcnew:统计 gc时,新生代的情况
-gcnewcapacity:统计 gc时,新生代 heap容量
-gcold:统计 gc时,老年代的情况
-gcoldcapacity:统计 gc时,老年代 heap容量
-gcpermcapacity:统计 gc时, permanent区 heap容量

使用如下:

image.png

名称代表啥名称代表啥
S0C第一个幸存区大小S1C第二个幸存区大小
S0U第一个幸存区使用大小S1U第二个幸存区使用大小
EC年轻代大小EU年轻代使用大小
MC元空间大小MU元空间使用大小
CCSC压缩类空间大小CCSU压缩类空间使用大小
YGC年轻代垃圾回收次数YGCT年轻代垃圾回收时间
FGC老年代垃圾回收次数FGCT老年代垃圾回收时间
GCT垃圾回收总耗时
单位为KB

jstat -gcutil 进程号 间隔时间

image.png

  • S0:幸存1区当前使用比例
  • S1:幸存2区当前使用比例
  • E:伊甸园区使用比例
  • O:老年代使用比例
  • M:元数据区使用比例
  • CCS:压缩使用比例
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

3、jmap命令

  jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。

image.png

参数:

  • option: 选项参数。
  • pid: 需要打印配置信息的进程ID。
  • executable: 产生核心dump的Java可执行文件。
  • core: 需要打印配置信息的核心文件。
  • server-id 可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。
  • remote server IP or hostname 远程调试服务器的IP地址或主机名。

option

  • no option: 查看进程的内存映像信息,类似 Solaris pmap 命令。
  • heap: 显示Java堆详细信息
  • histo[:live]: 显示堆中对象的统计信息
  • clstats: 打印类加载器信息
  • finalizerinfo: 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象
  • dump:<dump-options> 生成堆转储快照
  • F: 当-dump没有响应时,使用-dump或者-histo参数. 在这个模式下,live子参数无效.
  • help: 打印帮助信息
  • J<flag>: 指定传递给运行jmap的JVM的参数

4、jstack命令

jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息。 image.png

  • -F 强制执行 thread dump. 可在 Java 进程卡死(hung 住)时使用, 此选项可能需要系统权限。
  • -m 混合模式(mixed mode),将 Java 帧和 native帧一起输出, 此选项可能需要系统权限。
  • -l 长列表模式. 将线程相关的 locks 信息一起输出,比如持有的锁,等待的锁。