jps (JVM Process Status Tool)
显示指定系统中的所有虚拟机进程
> jps [ options ] [ hostid ]

jps 选项 [ options ] 说明:
-q 只输出LVMID 省略主类的名称;
-m 输出虚拟机进程启东市传递给主类main函数的参数;
-l 输出主类的名称,如果进程执行的是jar包,输出jar 路径;
-v 输出虚拟机进程启动时的JVM 参数
[ 注意 ]
使用 jps 指令得到的输出结果可能是下面这样的
pid -- process information unavailable
JVM 会在本地文件系统中的 tmp 文件夹中新建 hsperfdata_{username}/{pid} 文件, 如果当前执行 jps 指令的用户没有属于自己的这个文件,就会出现这种提示
例如: 我们公司tomcat 的启动用户默认是 tomcat,  JVM 新建的文件是 /tmp/hsperfdata_tomcat/pid(这是在linux系统中),这样导致了如下问题
不管使用 root 用户权限还是 普通用户权限都不能执行 jps 指令
上述问题解决方案
sudo -u tomcat jps pid
jstat (JVM Statistics Monitoring Tool)
> jstat [ option vmid [interval [s|ms] [count]]  ]
参数  interval, count 代表查询的间隔时间和次数,如果省略这两个参数表示只查询一次
假设需要每 1s 查询一次进程 3234 的jvm gc信息,一共查询10次
> jstat -gc 3234 1s 10
| 选项 | 作用描述 | 
|---|---|
| -class | 监视类装载、卸载数量、总空间以及类装载所耗费的时间 | 
| -gc | 监视 JVM 堆状况,包括 Eden区、两个survivor 区、老年代、永生代等的容量、已用空间、GC时间合计等信息 | 
| -gccapacity | 监视内容与 -gc 基本相同,但输出主要关注java 堆各个区域使用到的最大、最小空间 | 
| -gcutil | 监视内容与 -gc 基本相同,但输出主要关注已经使用空间占总空间的百分比 | 
| -gccause | 与 -gcutil 功能一样,但是会额外输出导致上一次 GC 产生的原因 | 
| -gcnew | 监视新生代 gc 状况 | 
| -gcnewcapacity | 监视内容与 -gcnew 基本相同,但输出主要关注新生代已经使用到的最大、最小空间 | 
| -gcold | 监视老年代 gc 状况 | 
| -gcoldcapacity | 监视内容与 -gcold 基本相同,但输出主要关注老年代已经使用到的最大、最小空间 | 
| -gcpermcapacity | 输出永久代已经使用到的最大、最小空间 | 
| -compiler | 输出JIT 编译器编译过的方法、耗时等信息 | 
| -gccompilation | 输出已经呗 JIT 编译的方法 | 
jinfo (Configuration Info for java)
实时查询和调整虚拟机各项参数
> jinfo [ option ] pid
liam@liamchen-ubuntu:~$ jinfo -help
Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)
where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both of the above
    -h | -help           to print this help message
jmap (Memory Map for Java)
生成对存储快照
> jmap [ option ] vmid
| 选项 | 作用描述 | 
|---|---|
| -dump | 生成 JVM 堆存储快照。 格式为: dump:[live,]format=b,file= | 
| -finalizeinfo | 显示在F-Queue 中等待Finalizer线程执行 finalize 方法的对象,只在 linux/solaris 平台下有效 | 
| -heap | 显示 JVM 堆详细信息,如使用那种回收器、参数配置、分代情况等。只在 linux/solaris 平台下有效 | 
| -histo | 显示堆中对象统计信息,包括类、实例数量、合计数量 | 
| -permstat | 以ClassLoader为统计口径,显示永生代内存状态,只在 linux/solaris 平台下有效 | 
| -F | 当 JVM 进程对 -dump 指令选项没有响应时,可使用这个选项强制生成dump 快照,只在 linux/solaris 平台下有效 | 
使用示例:
> jmap -dump:format=b,file=test.dump pid
jhat (JVM Heap Analysis Tool)
与jmap搭配使用, 来分析 jmap 生成的 堆存储快照文件
> jhat test.dump
当屏幕上出现 “Server is ready” 提示后,访问 http://localhost:7000 就能看到分析结果
[ 注意 ] : 分析工作比较消耗资源,可将dump 文件复制到其他机器上分析
jstack (Stack Trace for Java)
生成JVM 当前时刻的线程快照
> jstack [ option ] vmid
| 选项 | 作用描述 | 
|---|---|
| -l | 除堆栈外,显示关于锁的附加信息 | 
| -m | 打印 | 
| -F | 当 JVM 进程对指令没有响应时,可使用这个选项强制生成 threaddump 快照,只在 linux/solaris 平台下有效 | 
GC 日志
日志设置
1  | JAVA_OPTS="-Xms8g -Xmx16g -XX:PermSize=512m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=../logs -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:../logs/gc.log"  |