jconsole的使用


title: jconsole的使用
date: 2017-12-19 14:03:12
tags:


jconsole是基于jmx之上的一个jvm的监控工具。监控主要分以下几个区域

  • 概览
  • 内存
  • 线程
  • vm概要
  • MBean

本地的jvm程序可以直接启动,远程的jvm程序需要添加jvm参数才能让jconsole实现远程监控。

-Dcom.sun.management.jmxremote.port=8999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
package cai;

/**
 * Created by caiyl on 2017/1/12.
 * 死锁demo
 */
public class DeadLockDemo {
    private static String A = "A";
    private static String B = "B";

    public static void main(String[] args) {
        new DeadLockDemo().deadLock();
    }

    private void deadLock() {

        Thread t1 = new Thread(new Runnable() {
            public void run() {
                System.out.println("hasecode"+A.hashCode());
                synchronized (A){
                    System.out.println("synchronized a");
                    try {
                        Thread.currentThread().sleep(2000);
                    }catch (InterruptedException e){
                        e.printStackTrace();
                    }

                    synchronized (B){
                        System.out.println("synchronized b");
                    }
                }
            }
        },"threadone");

        Thread t2 = new Thread(new Runnable() {
            public void run() {
                synchronized (B){
                    synchronized (A){
                        System.out.println("2");
                    }
                }
            }
        },"threadtwo");

        t1.start();
        t2.start();
    }
}

运行 DeadLockDemo程序,然后启动jconsole,输入程序所在的ip和端口,如下图


jconsole的使用_第1张图片
jconsole连接

jconsole监控内存的使用情况,如下图所示,可以选择图表下拉框选择监控不同的区域,详细信息显示该区域已使用和最大值。
[图片上传失败...(image-2b9fdf-1513670619480)]

jconsole可以显示线程的状态,总数,堆栈。如下图
[图片上传失败...(image-299156-1513670619480)]

检测死锁

jconsole还有个强大的功能,检测死锁。点击检测死锁按钮,可以检测到死锁,如图中的线性threadone和线程threadtwo就是一对死锁,大家互相等待。
[图片上传失败...(image-ee4514-1513670619480)]
从图中可以看到线程threadone在等待锁java.lang.String@753ce0d9,改锁被threadtwo占有,同时线程threadone占有锁java.land.String@5b3f92c4。同样threadtwo在等待threadone占有的锁。如下图
[图片上传失败...(image-e15c8a-1513670619480)]

你可能感兴趣的:(jconsole的使用)