1
2
3
4
5
6
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
    1
    仅显示简单类名和pid
  • jps -l
    1
    输出主类或者jar的完全路径名
  • jps -v
    1
    输出jvm参数
  • jps –q
    1
    仅仅显示Java进程号

jstat

  • jstat -class PID
    1
    显示加载class的数量,及所占空间等信息
  • jstat -compiler PID
    1
    显示VM实时编译的数量等信息
  • jstat -gc PID
    1
    可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间
  • jstat -gccapacity PID
    1
    可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用量
  • jstat -gcnew PID
    1
    new对象的信息
  • jstat -gcnewcapacity PID
    1
    new对象的信息及其占用量
  • jstat -gcold PID
    1
    old对象的信息
  • jstat -gcoldcapacity PID
    1
    old对象的信息及其占用量
  • jstat -gcpermcapacity PID
    1
    perm对象的信息及其占用量
  • jstat -util PID
    1
    统计gc信息统计
  • jstat -printcompilation PID
    1
    当前VM执行的信息

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

jmap

  • jmap -F -dump:live,format=b,file={xxx.hprof} PID
1
2
3
live参数是可选的,如果指定,则只转储堆中的活动对象;表示我们需要抓取目前在生命周期内的内存对象,也就是说GC收不走的对象,然后我们绝大部分情况下,需要的看的就是这些内存;如果没有指定,则转储堆中的所有对象。
format=b表示生成的dump文件是二进制格式的。
-F参数是可选的,表示当进程接近僵死时,可以添加此参数进行强制转储
  • jmap -histo:live PID
    1
    生成java堆中对象的相关信息,包含数量以及占用的空间大小
  • jmap -heap PID
    1
    查看堆的使用状况信息

jinfo

  1. 可以在运行时动态调整JVM参数(无需重启)
  2. 查看正在运行的Java应用程序的扩展参数
  • jinfo -flag <参数> PID

    1
    查看当前pid单一参数值
  • jinfo -flags PID

    1
    查看当前pid所有参数值
  • jinfo -flag [+|-]pid

1
设置指定JVM参数的布尔值
  • jinfo -flag=pid
1
设置指定JVM参数的值

jstat

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文件名>