JVM命令行监控工具

1 jps

功能描述:jps 全称 JVM Process Status Tool,命令位于 jdk 的 bin 目录下,其作用是显示当前系统的 Java 进程情况,及其 pid 号。他是 Java自带的一个命令。

code:

public class Simple {

    public static void main(String[] args) {

        while (true){


        }
    }

}

在这里插入图片描述
-q:仅仅显示 LVMID (local virtual machine id),即本地虚拟机唯一id。不显示主类的名称等。
在这里插入图片描述
-l:输出应用程序主类的全类名或如果进程执行的是jar包,则输出jar完整路径
在这里插入图片描述
-m:输出虚拟机进程启动时传递给主类main()的参教
在这里插入图片描述
-v: 列出jvm参数, -Xms20m -Xmx50m是启动程序指定的jvm参数。

设置启动参数:-Xms100m -Xms100m
在这里插入图片描述
以上参数可以综合使用:
在这里插入图片描述

2 jstat

jstat(Java Virtual Machine statistics monitoring tool)它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。

它的基本使用语法为:

#jstat 
#-t: 在输出信息前加上一个Timestamp列,显示程序的运行时间。单位:秒。
#-h: 可以在周明性数据輸出时,输出多少行数据后輸出一个表头信息
#vmid: java进程ID
#-interval: 用于指定输出统计数据的周期,单位为毫秒,:查识间隔
#-count:用于指定查询的总次数
jstat -<option> [-t] [-h<lines>] <vmid> [<interval>[<count>]]

选项 option可以由以下值构成:

类装载相关的:

-class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间类装载所消耗的时间等

垃圾回收相关的:

-gc:显示与GC相关的堆信息。包括Eden区、两个 Survivor区、老年代永久代等的容量、早用空间、GC时间合计等信息。

-capacity:显示内容与-gc基本相同,但输出主要关注]ava堆各个区域使用到的最大、最小空间。

-gcutil:显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比。

-gccause:与-gcutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因 。

-gcnew:显示新生代GC状况。

-gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间。

-gold:显示老年代GC状况

2.1 code

public class Simple {


    /**
     * VM options: -Xms100m -Xms100m
     */
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        String info = scanner.next();
    }


}

2.2 类装载

显示ClassLoader的相关信息:类的装载、卸载数量、总空间类装载所消耗的时间等
在这里插入图片描述
1秒打印一次,打印5次:

#-interval: 用于指定输出统计数据的周期,单位为毫秒,:查识间隔
#-count:用于指定查询的总次数
#-t: 在输出信息前加上一个Timestamp列,显示程序的运行时间。单位:秒。
#-h: 可以在周明性数据輸出时,输出多少行数据后輸出一个表头信
jstat -class -t -h2 6928 1000 10

在这里插入图片描述

2.2 垃圾回收

#-gc:显示与GC相关的堆信息。包括Eden区、两个 Survivor区、老年代永久代等的容量、早用空间、GC时间合计等信息。
jstat -gc 6928

s0总容量、S1总容量、S0使用容量、S1使用容量、Eden总容量、Eden使用容量、Old总容量、Old使用容量、方法区总容量、方法区使用容量、压缩类总容量、压缩类使用容量、YongGC次数、YongGC花费时间、FullGC次数、FullGC花费时间、GC总花费时间
在这里插入图片描述
code


public class GCTest {

    /**
     * VM options:-Xms60m -Xmx60m
     */
    public static void main(String[] args) {

        List<Object> list = new ArrayList<>();
        for (int i = 1; i <= 1000; i++) {
            //100KB
            byte[] arr = new byte[1024 * 100];
            list.add(arr);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }

}

在这里插入图片描述

#-gcutil查看OOM
jstat -gcutil 12464 1000 30

在这里插入图片描述

在这里插入图片描述

3 jmap

jmap (JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件、二进制文件)它还可以获取目标Java进程的内存相关信息,包括]ava堆各区域的使用情况、堆中对象的统计信息.、类加载信息等。

它的基本使用语法为:

jmap [option] <pid>
jmap [option] <executable <core>>
jmap [option] [server_id@]<remote server IP or hostname>

其中option包括:
在这里插入图片描述

导出内存映射文件:

一般来说,使用jmap指令生成dump文件的操作算得上是最常用的jmap命令之一,将堆中所有存活对象导出至一个文件之中。

说明
(1)通常在写 Heap Dump 文件前会触发一次Full GC,所以 heap dump文件里保存的都是FullGC后留下的对象信息。
(2)由于生成dump文件比较耗时,因此大家需要耐心等待,尤其是大内存镜像生成dump文件则需要耗费更长的时间来完成。

3.1 手动的方式

jmap -dump:format=b,file=<filename,hprof> <pid>
#live 只保存堆中存活的对象
jmap -dump:live,format=b,file=<filename,hprof> <pid> 

code

/**
     * VM options:-Xms60m -Xmx60m
     */
    public static void main(String[] args) {
        List<Object> list = new ArrayList<>();
        for (int i = 1; i <= 1000; i++) {
            //100KB
            byte[] arr = new byte[1024 * 100];
            list.add(arr);
            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

#命令
jmap -dump:format=b,file=d:\temp.hprof 17788
jmap -dump:live,format=b,file=d:\temp_live.hprof 17788

在这里插入图片描述
在这里插入图片描述

3.2 自动方式

当程序发生OOM退出系统时,一些瞬时信息都随着程序的终止而消失,而重现OOM问题往往比较困难或者耗时。此时若能在OOM时,自动导出dump文件就显得非常迫切。

获取快照文件的方法:

-XX:+HeapDumpOnOutOfMemoryError:在程序发生OOM时,导出应用程序的当前堆快照。
-XX:HeapDumpPath:可以指定堆快照的保存位置。

例如:

-Xms60m -Xmx60m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\temp_oom.hprof

修改VM参数:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

响彻天堂丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值