JDK内置开发工具 + 诊断工具详解

本文详细介绍了JDK自带的命令行工具,包括JPS、jstat、jmap、jcmd、jstack、jinfo、jrunscript和jjs等,这些工具对于Java开发者进行诊断和分析JVM状况至关重要。例如,JPS用于显示Java进程信息,jstat监控内存和GC统计,jmap用于Dump堆内存,jcmd提供VM相关信息,jstack打印线程调用栈,jinfo查看配置信息,jrunscript和jjs则支持执行JavaScript脚本。
摘要由CSDN通过智能技术生成

JDK 内置命令行工具

很多情况下,JVM 运行环境中并没有趁手的工具,所以掌握基本的内置工具是一项基本功。

JDK 自带的工具和程序可以分为 2 大类型:

  1. 开发工具
  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] [<hostid>]
Definitions:
    <hostid>:      <hostname>[:<port>]
复制

可以看到, 这些参数分为了多个组,-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 -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
  <option>      可用的选项,查看详情请使用 -options
  <vmid>        虚拟机标识符,格式:<lvmid>[@<hostname>[:<port>]]
  <lines>       标题行间隔的频率.
  <interval>    采样周期,<n>["ms"|"s"],默认单位是毫秒 "ms"
  <count>       采用总次数
  -J<flag>      传给jstat底层JVM的 <flag> 参数
复制

再来看看 `` 部分支持哪些选项:

$ jstat -options

-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation
复制

简单说明这些选项,不感兴趣可以跳着读。

  • -class:类加载(Class loader)信息统计。
  • -compiler:JIT 即时编译器相关的统计信息。
  • -gc:GC 相关的堆内存信息,用法:jstat -gc -h 10 -t 864 1s 20
  • -gccapacity:各个内存池分代空间的容量。
  • -gccause:看上次 GC、本次 GC(如果正在 GC 中)的原因,其他输出和 -gcutil 选项一致。
  • -gcnew:年轻代的统计信息(New = Young = Eden + S0 + S1)。
  • -gcnewcapacity:年轻代空间大小统计。
  • -gcold:老年代和元数据区的行为统计。
  • -gcoldcapacity:old 空间大小统计。
  • -gcmetacapacity:meta 区大小统计。
  • -gcutil
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值