使用jconsole、jvisualvm查看线程运行状态、内存实时监控

目录

一、jconsole

 二、jvisualvm


引言:在实际开发中由于锁的使用不当可能回造成死锁的现象,那么该怎么判断是否发生死锁了呢?在这里介绍两个jdk提供的工具

首先我们先手动创建一个简单的死锁环境运行成功后,看下面推荐的两个jdk提供的工具

import java.util.concurrent.TimeUnit;

public class text {
    static Object lockA = new Object();
    static Object lockB = new Object();
    public static void main(String[] args) throws InterruptedException {
        new Thread(()->{
            synchronized (lockA){
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lockB){

                }
            }

        }).start();
        new Thread(()->{
            synchronized (lockB){
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (lockA){

                }
            }

        }).start();

    }
}

一、jconsole

1、在cmd中输入jconsole,点击回车后回弹出相关的框框

 2、点击本地连接,然后要查看的进程,然后点击连接

 3、在弹出的页面中点击不安全连接

 4、点击检测死锁

5、点击相关的线程查看信息,可以定位到java代码可能发生死锁的位子

 二、jvisualvm

 1、在cmd中直接输入jvisualvm,点击回车会弹出框框

2、选择要查看的进程双击

 3、双击之后会展示进程相关信息,这时候点击线程,查看线程信息

 4、如果存在死锁,会出现下图的样式,然后点击红色框框中的线程Dump

 5、点击线程Dump之后进入新页面拖到最底下就能看到线程死锁相关信息

总结:jdk提供的这两款可视化工具不仅能够给我们排查死锁情况,还能让我们实时监控内存的使用,很牛就是了

猜你喜欢

转载自blog.csdn.net/Promise_J_Z/article/details/121413871
今日推荐