JDK监控和诊断工具——jconsole

8 篇文章 1 订阅

1.查看

jconsole命令,可以启动图形控制台来监视和管理 Java 应用程序。需要有桌面环境,Linux没桌面的服务器,不能用。

打开cmdpowershell输入jconsole -h,就会弹出来jconsole的帮助命令界面。

(base) PS G:\Project\highway-resources>jconsole -h

jconsole-帮助

这些都是中文,不过多解释了。既然是图像界面,用操作来讲解。

cmdpowershell输入jconsole,会打开JConsole的图像界面。

我们提前运行一个Java程序,以方便我们观察

import java.util.concurrent.TimeUnit;

/**
 * 学习jconsole
 *
 * @author 编程还未
 * @since 2022/4/18 20:56
 **/
public class TestJConsole {
    public static void main(String[] args) {
        System.out.println("hello world");
        try {
            Thread.currentThread().setName("Test jconsole");
            //等待十分钟,方便使用jconsole命令
            TimeUnit.MINUTES.sleep(10);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

在这里插入图片描述

选不安全的连接。这个主要是因为没用https,这个不影响。连接后进到下面的概要界面。

jconsole-概览

概览,没什么好解释的,显示的是一个统计汇总后的结果。可以选择后面的内存线程VM概要MBean来查看各项的详细内容,主要是前四个。

2.各区域详解

2.1.内存

内存:就是查看JVM运行时,占用的内存情况。这里可选各种内存的使用情况。如果不了解JVM运行时内存划分的话,可以参考我这边文章面试必备——图文剖析JVM的运行时数据区_编程还未的博客-CSDN博客

jconsole-内存选项

2.1.1.观察内存的波动

我们用一个demo,模拟一下频繁使用时,内存的情况。

启动jconsole的时候,可以用jconsole -interval=1,每秒刷新一次。

/**
 * 学习jconsole,观察劲爆一点的内存占用
 *
 * @author 编程还未
 * @since 2022/4/18 20:56
 **/
public class TestJConsole1 {
    public static void main(String[] args) throws InterruptedException {
        //循环一万次,创建数组
        for (int i = 0; i < 10000; i++) {
            int[] a = new int[1024];
            //暂停100毫秒,不然一万次循环太快,没等打开工具就执行完了
            TimeUnit.MILLISECONDS.sleep(100);
        }
    }
}

jconsole-内存增长

2.2.线程

线程这块,就是观察线程的数量。

线程列表

上图红框位置是当前进程下的线程列表,点击选择后,右侧是线程的详细信息,可以进行线程的堆栈跟踪。

2.2.1.观察线程的波动

我们用一个demo,模拟一下频繁使用时,线程的情况。

启动jconsole的时候,可以用jconsole -interval=1,每秒刷新一次。这个观察一下就可以把程序关掉,让他自己运行完,有可能把CPU跑崩掉。

import java.util.concurrent.TimeUnit;

/**
 * 学习jconsole,观察劲爆一点的线程情况
 *
 * @author 编程还未
 * @since 2022/4/18 20:56
 **/
public class TestJConsole2 {
    public static void main(String[] args) throws InterruptedException {
        //循环一万次,创建线程
        for (int i = 0; i < 10000; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        TimeUnit.SECONDS.sleep(60);
                        System.out.println("线程创建");
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }).start();
            TimeUnit.MILLISECONDS.sleep(100);
        }
        TimeUnit.SECONDS.sleep(60);
    }
}

jconsole-线程增长

2.3.类

类这个就是加载的类。这个没什么好说的。

2.4.VM概要

这个是JVM相关的信息,版本信息,配置参数等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程还未

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

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

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

打赏作者

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

抵扣说明:

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

余额充值