这是我参与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的缩写。非常简单实用。
用法:
参数 | 干嘛的 |
---|---|
-q | 只输出进程 ID |
-m | 输出传入 main 方法的参数 |
-l | 输出完全的包名,应用主类名,jar的完全路径名 |
-v | 输出jvm参数 |
-V | 输出通过flag文件传递到JVM中的参数 |
hostid | 查看远程服务上的 jvm 进程信息 |
一般lmv组合使用,显示java进程详细信息:
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容量
使用如下:
名称 | 代表啥 | 名称 | 代表啥 |
---|---|---|---|
S0C | 第一个幸存区大小 | S1C | 第二个幸存区大小 |
S0U | 第一个幸存区使用大小 | S1U | 第二个幸存区使用大小 |
EC | 年轻代大小 | EU | 年轻代使用大小 |
MC | 元空间大小 | MU | 元空间使用大小 |
CCSC | 压缩类空间大小 | CCSU | 压缩类空间使用大小 |
YGC | 年轻代垃圾回收次数 | YGCT | 年轻代垃圾回收时间 |
FGC | 老年代垃圾回收次数 | FGCT | 老年代垃圾回收时间 |
GCT | 垃圾回收总耗时 | ||
单位为KB |
jstat -gcutil 进程号 间隔时间
- S0:幸存1区当前使用比例
- S1:幸存2区当前使用比例
- E:伊甸园区使用比例
- O:老年代使用比例
- M:元数据区使用比例
- CCS:压缩使用比例
- YGC:年轻代垃圾回收次数
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
3、jmap命令
jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。
参数:
- 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堆栈信息。
- -F 强制执行 thread dump. 可在 Java 进程卡死(hung 住)时使用, 此选项可能需要系统权限。
- -m 混合模式(mixed mode),将 Java 帧和 native帧一起输出, 此选项可能需要系统权限。
- -l 长列表模式. 将线程相关的 locks 信息一起输出,比如持有的锁,等待的锁。