JVM监控及诊断可视化工具——JConsole

  • jconsole是Java 5 开始,在JDK中自带的java监控和管理控制平台。
  • 用于堆JVM中内存、线程和类等的监控,是一个基于JMX的GUI性能监控工具。

如何启动jconsole?
方法1:找到jdk安装目录的bin文件夹,双击jconsole
在这里插入图片描述
在这里插入图片描述

方法2:win+r 输入cmd,打开dos窗口,直接输入jconsole
在这里插入图片描述
在这里插入图片描述

我们看到有两种链接方式:本地连接和远程连接。

  • 本地连接

测试代码:


/**
 * -Xms600m -Xmx600m -XX:SurvivorRatio=8
 */
public class HeapInstanceTest {
    byte[] buffer = new byte[new Random().nextInt(1024 * 100)];

    public static void main(String[] args) {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        ArrayList<HeapInstanceTest> list = new ArrayList<HeapInstanceTest>();
        while (true) {
            list.add(new HeapInstanceTest());
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

修改JVM的参数,设置堆内存大小为600m,eden和s0区、s1区比例为8:1:1
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其他的我就不举例了,可以自己点点找找自己想要的信息。

  • Jconsole检测死锁
/**
 * 演示线程的死锁问题
 *
 */
public class ThreadDeadLock {

    public static void main(String[] args) {

        StringBuilder s1 = new StringBuilder();
        StringBuilder s2 = new StringBuilder();

        new Thread(){
            @Override
            public void run() {

                synchronized (s1){

                    s1.append("a");
                    s2.append("1");

                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    synchronized (s2){
                        s1.append("b");
                        s2.append("2");

                        System.out.println(s1);
                        System.out.println(s2);
                    }

                }

            }
        }.start();


        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (s2){

                    s1.append("c");
                    s2.append("3");

                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                    synchronized (s1){
                        s1.append("d");
                        s2.append("4");

                        System.out.println(s1);
                        System.out.println(s2);
                    }
                }
            }
        }).start();

    }
}

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

远程连接:https://blog.csdn.net/weixin_32508109/article/details/116973278

jconsole作为一个了解即可,用起来也不费劲,jvm性能监控更推荐JVisualVM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值