因收到Google相关通知,网站将会择期关闭。相关通知内容 09 JDK 内置命令行工具:工欲善其事,必先利其器 很多情况下,JVM 运行环境中并没有趁手的工具,所以掌握基本的内置工具是一项基本功。 JDK 自带的工具和程序可以分为 2 大类型: 开发工具 诊断分析工具 JDK 内置的开发工具 写过 Java 程序的同学,对 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 安全策略 开发工具此处不做详细介绍,有兴趣的同学请参考文末的链接。 下面介绍诊断和分析工具。 命令行诊断和分析工具 JDK 内置了各种命令行工具,条件受限时我们可以先用命令行工具快速查看 JVM 实例的基本情况。 macOS X、Windows 系统的某些账户权限不够,有些工具可能会报错/失败,假如出问题了请排除这个因素。 JPS 工具简介 我们知道,操作系统提供一个工具叫做 ps,用于显示进程状态(Process Status)。 Java也 提供了类似的命令行工具,叫做 JPS,用于展示 Java 进程信息(列表)。 需要注意的是,JPS 展示的是当前用户可看见的 Java 进程,如果看不见某些进程可能需要 sudo、su 之类的命令来切换权限。 查看帮助信息: $ jps -help usage: jps [-help] jps [-q] [-mlvV] [] Definitions: : [:] 可以看到, 这些参数分为了多个组,-help、-q、-mlvV, 同一组可以共用一个 -。 常用参数是小写的 -v,显示传递给 JVM 的启动参数。 $ jps -v 15883 Jps -Dapplication.home=/usr/local/jdk1.8.0_74 -Xms8m 6446 Jstatd -Dapplication.home=/usr/local/jdk1.8.0_74 -Xms8m -Djava.security.policy=/etc/java/jstatd.all.policy 32383 Bootstrap -Xmx4096m -XX:+UseG1GC -verbose:gc -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/xxx-tomcat/logs/gc.log -Dcatalina.base=/xxx-tomcat -Dcatalina.home=/data/tomcat 看看输出的内容,其中最重要的信息是前面的进程 ID(PID)。 其他参数不太常用: -q:只显示进程号。 -m:显示传给 main 方法的参数信息 -l:显示启动 class 的完整类名,或者启动 jar 的完整路径 -V:大写的 V,这个参数有问题,相当于没传一样。官方说的跟 -q 差不多。 :部分是远程主机的标识符,需要远程主机启动 jstatd 服务器支持。 可以看到,格式为 [:],不能用 IP,示例:jps -v sample.com:1099。 知道 JVM 进程的 PID 之后,就可以使用其他工具来进行诊断了。 jstat 工具简介 jstat 用来监控 JVM 内置的各种统计信息,主要是内存和 GC 相关的信息。 查看 jstat 的帮助信息,大致如下: $ jstat -help Usage: jstat -help|-options jstat -