目录
文章后续更改会放置于: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