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

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

一、JDK命令行工具简介

工具 简介
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 查看线程信息
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 信息一起输出,比如持有的锁,等待的锁。

猜你喜欢

转载自juejin.im/post/7031186440167882759
今日推荐