详细介绍Jconsole和jvisualvm的使用

本文介绍了如何使用JConsole和JVisualVM这两种工具来监控和管理Java应用程序。通过设置特定的JVM参数,可以实现对进程的远程监控,并详细展示了如何观察内存使用情况、线程状态等。

  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.youkuaiyun.com/a19881029/article/details/8432368

https://blog.youkuaiyun.com/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

 

 

JMX(Java Management Extensions)是一种基于Java的管理技术,它允许应用程序通过标准接口提供管理信息。配置JMX远程监控主要涉及服务器端客户端的设置,以便可以使用JConsoleJVisualVM等工具对运行中的Java应用程序进行远程诊断监控。下面是详细的配置步骤: 参考资源链接:[JMX配置详解与实战教程:服务器端、客户端及主机名设置](https://wenku.csdn.net/doc/51yzrxv1a7?spm=1055.2569.3001.10343) 1. 服务器端配置: - 确保Java应用程序配置了JMX远程端口,以便客户端可以连接到服务器。这通常通过添加JVM参数来实现,例如: ``` -Dcom.sun.management.jmxremote.port=8999 ``` - 如果需要远程连接时的身份验证,还需要设置用户名密码。这可以通过添加以下参数来完成: ``` -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.access.file=jmxremote.access -Dcom.sun.management.jmxremote.password.file=jmxremote.password ``` - 对于需要加密通信的情况,可以启用SSL连接,通过设置如下参数: ``` -Dcom.sun.management.jmxremote.ssl=*** ***.ssl.keyStore=路径/到/你的/*** ***.ssl.keyStorePassword=密钥库密码 ***.ssl.trustStore=路径/到/你的/*** ***.ssl.trustStorePassword=信任库密码 ``` 2. 客户端配置: - 确定服务器端JMX端口已正确打开并监听,客户端使用JConsoleJVisualVM连接到该端口进行监控。 - 如果使用JConsole,可以通过`JConsole`工具输入Java应用程序的主机名JMX端口号进行连接。 - 如果使用JVisualVM,同样需要在`JVisualVM`中添加远程主机,并输入相应的JMX端口号。 3. 主机名配置: - 如果在连接时遇到无法识别主机名的问题,确保`/etc/hosts`文件中映射了正确的IP地址主机名。 - 在Linux系统中,可以通过编辑`/etc/hosts`文件或使用`hostname`命令修改临时主机名来解决名称解析问题。例如: ``` *** *** ``` 以上步骤完成后,你应该能够成功地使用JConsoleJVisualVM连接到Java应用程序的JMX服务进行远程监控诊断。为了更深入地了解JMX配置及使用,推荐阅读《JMX配置详解与实战教程:服务器端、客户端及主机名设置》,这本书详细介绍了JMX的配置方法,并提供了丰富的实战案例帮助读者理解并应用JMX进行应用管理。 参考资源链接:[JMX配置详解与实战教程:服务器端、客户端及主机名设置](https://wenku.csdn.net/doc/51yzrxv1a7?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值