详细介绍Jconsole和jvisualvm的使用


  1. Jconsole

FROM : http://jiajun.iteye.com/blog/810150

Jconsole是一种基于JMX的可视化监视,管理工具。

启动JconsoleC:\Oracle\Middleware\jdk160_14_R27.6.5-32\bin 双击jconsole.exe

Jconsole 链接本地java进程是灰色的

-Xms100m -Xmx100m -XX:+UseSerialGC

-Dcom.sun.management.jmxremote  -Dcom.sun.management.jmxremote.port=8011-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false

这是因为JVM在启动的时候默认加载参数没有进行设置,设置如下参数后

-Dcom.sun.management.jmxremote  -Dcom.sun.management.jmxremote.port=8011-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

 

 

重新打开Jconsole,然后在远程连接下输入127.0.0.1:8011 则可以成功连接,

程序运行期间,Jconsole可以一直监视内存情况,一旦程序运行结束,则连接失败。

 

  1. 运行的程序如下,观察堆的内存变化:

public classHelloWorld {

 

    staticclass OOMObject {

       public byte[] placeholder = new byte[64 *1024];

    }

 

    publicstatic void fillHeap(int num) throwsInterruptedException {

       List<OOMObject> list = new ArrayList<OOMObject>();

 

       for (int i = 0; i < num; i++) {

           Thread.sleep(50);

           list.add(new OOMObject());

       }

 

       System.gc();

    }

 

    publicstatic void main(String[] args) throwsInterruptedException {

       fillHeap(1000);

       

    }

 

}

 

  1. 演示Jconsole监视线程运行状态:

public classHelloWorld {

 

   /**

    * 线程死循环演示

    */

    publicstatic void createBusyThread() {

       Thread thread = new Thread(new Runnable() {

 

           @Override

           public void run() {

                while (true) {

                    ;

                }

           }

 

       }, "testBusyThread");

       thread.start();

    }

   

   /**

    * 线程等待演示

    * @param lock

    */

    publicstatic void createLockThread(final Object lock) {

       Thread thread = new Thread(new Runnable() {

 

           @Override

           public void run() {

                synchronized (lock) {

                    try {

                        lock.wait();

                    } catch(InterruptedException e) {

                        // TODOAuto-generated catch block

                        e.printStackTrace();

                    }

                }

 

           }

 

       }, "testLockThread");

 

       thread.start();

    }

 

    publicstatic void main(String[] args) throws IOException

    {

       BufferedReader b = new BufferedReader(newInputStreamReader(System.in));

       b.readLine();

       createBusyThread();

       

       b.readLine();

       Object obj = new Object();

       

       createLockThread(obj);

    }

}

运行之后:

看到main线程处于Runnable状态,等待控制台输入,

 

当输入1之后,可以看到线程testBusyThread线程处于Runnable,且一直停留在17行,也就是while(true)状态

 

当输入2之后,可以看到testLockThread线程一直在wait中,线程状态也是waiting

 

 

  1. 二. JvisualVM

启动:C:\Oracle\Middleware\jdk160_14_R27.6.5-32\binjvisualvm.exe

作用: 监控内存泄露,跟踪垃圾回收,执行时内存、cpu分析,线程分析

使用java自带的jvisualvm---可以找到具体的java进程的id

  如果同时运行多个java程序,则从左边这课树清晰的看到

FROM : http://blog.csdn.net/a19881029/article/details/8432368

https://blog.csdn.net/wulantian/article/details/47777059

程序运行后会自动监控本机运行的java程序

 

在要监控的程序加入如下参数,由于本地测试时没有安装插件,所以监视的节点比较少

 

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8011-Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=false

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值