1  jvm工具有哪些?

在jdk的bin目录下,可见的都是jvm的工具。

jvm_export监控多个Java应用_运维

 

 

 2 每个工具是干什么的?

用于处理OOM或者fullgc时分析原因的工具

定位线程长时间未反应的原因。

可以在lib目下的tools.jar包中可以看到具体的工具是怎么实现的。可以将jar包拖到jd-gui.exe反编译工具中进行源码查看。

jvm_export监控多个Java应用_运维_02

 

 

 

3 jps工具

jps,简言之java的ps命令,跟Linux的ps的命令很相似,java虚拟机的进程查看工具,可以列出正在运行的虚拟机进程,并显示执行的主类(main所在的类)和进程id。

  • jsp -l

        展示pid和执行的主类

jvm_export监控多个Java应用_java_03

 

 

  •  jps -m

输出传入 main 方法的参数。

jvm_export监控多个Java应用_运维_04

  • jps -v

展示jvm启动参数

jvm_export监控多个Java应用_垃圾回收_05

 

 

 4  jstat工具

  • jstat -gc pid 毫秒数m 行数n

每隔m毫秒数打印一行,一共打印n行

jvm_export监控多个Java应用_垃圾回收_06

 

 

s0c:第一个幸存区的总大小;s0u:第一个幸存区的已使用大小。

s1c:第二个幸存区的总大小;s1u:第二个幸存区的已使用大小

Ec:伊甸园区的总大小;Eu:伊甸园区已使用的大小

oc:老年代总大小 ;ou:老年代已使用的大小

Mc:方法区的总大小 ;Mu:方法区的总大小

ccsc:压缩类空间文件的总大小;ccsu:压缩类空间文件的已使用大小

ygc:年轻代垃圾回收的次数;ygct:年轻代垃圾回收消耗的时间

fgc:老年代垃圾回收的次数;fgct:老年代垃圾回收消耗的时间

gct:垃圾回收消耗的总时间。

 5 jinfo工具

实时地调整和查看虚拟机的各项参数

  • jinfo pid

jvm_export监控多个Java应用_老年代_07

6 jmap工具

用于生成堆转储快照,用于系统复盘。

  • jmap -heap pid

展示堆信息

jvm_export监控多个Java应用_垃圾回收_08

 

 

  •  jmap -histo pid
  • 或者分页查看  jmap -histo pid|more

查看类的实例,instances显示实例的个数,byte为大小

jvm_export监控多个Java应用_运维_09

  •  jmap -dump:format=b,file=d:/test.bin pid

生成堆存储快照。

jvm_export监控多个Java应用_操作系统_10

  •  展示堆栈溢出的测试类,当运行中堆栈溢出时自动生成转储快照。
public class OOMTest {
    public static void main(String[] args){
        String a="测试数据";
        // 生成100000000个"测试数据"
        for(int i=0;i<100000000;i++){
            a+=a;
        }
    }
}



编辑jvm启动参数    -Xmx20m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/

jvm_export监控多个Java应用_java_11

 

 

 

jvm_export监控多个Java应用_java_12

 

       运行,程序即可看到程序报错,并且在d盘下可以看到转储快照。

 

 7 jhat工具

用于分析jmap生成的堆转储快照信息。可以通过浏览器查看分析结果。

  • jhat 快照地址

jvm_export监控多个Java应用_操作系统_13

 

 

 通过浏览器访问结果

jvm_export监控多个Java应用_老年代_14

 

 

 

 

jvm_export监控多个Java应用_java_15

 8 jstack 工具

生成当前线程的快照。线程快照是当前虚拟机内一条线程正在执行的方法堆栈的集合。

jstack -l pid

jvm_export监控多个Java应用_运维_16