• jinfo:可以输出并修改运行时的 Java 进程的 opts。
  • jps:与 Unix 上的 ps 类似,用来显示本地的 Java 进程,可以查看本地运行着几个 Java 程序,并显示他们的进程号。
  • jstat:一个极强的监视 VM 内存工具。可以用来监视 VM 内存内的各种堆和非堆的大小及其内存使用量。
  • jstack:用于打印出给定的 Java 进程 ID 或 core file 或远程调试服务的 Java 堆栈信息,如果是在 64 位机器上,需要指定选项 -J-d64,Windows 的 jstack 使用方式只支持以下的这种方式。
  • jmap:打印出某个 Java 进程(使用 pid)内存内的所有对象的情况(如:产生那些对象,及其数量)。
  • jconsole/jvisualvm:Java GUI 监视工具,可以以图表化的形式显示各种数据,并可通过远程连接监视远程的服务器。

    命令后接>>输出某一位置,如: jstat -gc 13976 >> d:\c.txt

jps

  • jps:仅显示简单类名和 pid
  • jps -l:输出主类或者 jar 的完全路径名
  • jps -v:输出 JVM 参数
  • jps -q:仅仅显示 Java 进程号

jstat

  • jstat -class PID:显示加载 class 的数量,及所占空间等信息
  • jstat -compiler PID:显示 VM 实时编译的数量等信息
  • jstat -gc PID:可以显示 gc 的信息,查看 gc 的次数,及时间。其中最后五项,分别是 young gc 的次数、young gc 的时间、full gc 的次数、full gc 的时间、gc 的总时间
  • jstat -gccapacity PID:可以显示 VM 内存中三代(young/old/perm)对象的使用和占用大小
  • jstat -gcnew PID:new 对象的信息
  • jstat -gcnewcapacity PID:new 对象的信息及其占用量
  • jstat -gcold PID:old 对象的信息
  • jstat -gcoldcapacity PID:old 对象的信息及其占用量
  • jstat -gcpermcapacity PID:perm 对象的信息及其占用量
  • jstat -util PID:统计 gc 信息统计
  • jstat -printcompilation PID:当前 VM 执行的信息

    除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题

jmap

  • jmap -F -dump:live,format=b,file={xxx.hprof} PIDlive 参数可选,指定后只转储堆中的活动对象;format=b 表示生成二进制格式的 dump 文件;-F 参数可选,表示当进程接近僵死时强制转储。
  • jmap -histo:live PID:生成 Java 堆中对象的相关信息,包含数量以及占用的空间大小。
  • jmap -heap PID:查看堆的使用状况信息。

jinfo

  1. 可以在运行时动态调整JVM参数(无需重启)
  2. 查看正在运行的Java应用程序的扩展参数
  • jinfo -flag <参数> PID:查看当前 pid 单一参数值
  • jinfo -flags PID:查看当前 pid 所有参数值
  • jinfo -flag [+|-]<name> pid:设置指定 JVM 参数的布尔值
  • jinfo -flag <name>=<value> pid:设置指定 JVM 参数的值

jstack

jstack用于生成线程快照的, 命令语法:

1
jstack [options] pid
选项作用
-F当正常输出的请求不被响应时,强制输出线程堆栈
-m如果调用到本地方法的话,可以显示C/C++的堆栈
-l除堆栈外,显示关于锁的附加信息,在发生死锁时可以用jstack -l pid来观察锁持有情况

一般会查找最吃资源的线程id,然后转16进制进行筛选jstack <pid> | grep -A 30 <最吃资源的线程id>

jhat(jdk9中已被移除)

分析dump文件,会启动个http server,默认端口在7000, 命令语法:

1
jhat [-port 7000] <dump文件名>