前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM-JConsole:Java监视与管理控制台(windows)

JVM-JConsole:Java监视与管理控制台(windows)

作者头像
逍遥壮士
发布2021-12-01 16:53:06
7860
发布2021-12-01 16:53:06
举报
文章被收录于专栏:技术趋势技术趋势

JConsole是什么?

JConsole(Java Monitoring and Management Console)是一款基于JMX(Java Manage-mentExtensions)的可视化监视、管理工具。

JConsole干什么用?

它的主要功能是通过JMX的MBean(Managed Bean)对系统进行信息收集和参数动态调整。JMX是一种开放性的技术,不仅可以用在虚拟机本身的管理上,还可以运行于虚拟机之上的软件中,典型的如中间件大多也基于JMX来实现管理与监控。虚拟机对JMXMBean的访问也是完全开放的,可以使用代码调用API、支持JMX协议的管理控制台,或者其他符合JMX规范的软件进行访问。

测试代码

代码语言:javascript
复制
class OOMObject {
    public byte[] placeholder = new byte[64 * 1024];

    public static void fillHeap(int num) throws InterruptedException {
        List<OOMObject> list = new ArrayList<OOMObject>();
        for (int i = 0; i < num; i++) {
// 稍作延时,令监视曲线的变化更加明显
            Thread.sleep(50);
            list.add(new OOMObject());
        }
        System.gc();
    }

    public static void main(String[] args) throws Exception {
        fillHeap(1000);
    }

}

配置

代码语言:javascript
复制
-Xms100m -Xmx100m -XX:+UseSerialGC
-Dcom.sun.management.jmxremote

使用

进入jdk bin 运行 jconsole.exe

运行进程进行连接

注意:运行异常

代码语言:javascript
复制
Exception in thread "VMPanel.connect" java.lang.InternalError: Remote thread failed for unknown reason
  at sun.tools.attach.WindowsVirtualMachine.enqueue(Native Method)
  at sun.tools.attach.WindowsVirtualMachine.execute(WindowsVirtualMachine.java:96)
  at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:261)
  at sun.tools.attach.HotSpotVirtualMachine.executeJCmd(HotSpotVirtualMachine.java:243)
  at sun.tools.attach.HotSpotVirtualMachine.startLocalManagementAgent(HotSpotVirtualMachine.java:204)
  at sun.tools.jconsole.LocalVirtualMachine.loadManagementAgent(LocalVirtualMachine.java:239)
  at sun.tools.jconsole.LocalVirtualMachine.startManagementAgent(LocalVirtualMachine.java:98)
  at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:333)
  at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:313)
  at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:294)
Exception in thread "VMPanel.connect" java.lang.InternalError: Remote thread failed for unknown reason
  at sun.tools.attach.WindowsVirtualMachine.enqueue(Native Method)
  at sun.tools.attach.WindowsVirtualMachine.execute(WindowsVirtualMachine.java:96)
  at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:261)
  at sun.tools.attach.HotSpotVirtualMachine.executeJCmd(HotSpotVirtualMachine.java:243)
  at sun.tools.attach.HotSpotVirtualMachine.startLocalManagementAgent(HotSpotVirtualMachine.java:204)
  at sun.tools.jconsole.LocalVirtualMachine.loadManagementAgent(LocalVirtualMachine.java:239)
  at sun.tools.jconsole.LocalVirtualMachine.startManagementAgent(LocalVirtualMachine.java:98)
  at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:333)
  at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:313)
  at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:294)

解决方法:在运行时加上参数如下

代码语言:javascript
复制
-Dcom.sun.management.jmxremote

查看内存情况

检测死锁

代码语言:javascript
复制
package com.jvm.view;

/**
 * @author: csh
 * @Date: 2020/12/16 17:04
 * @Description:
 */
public class ThradLock {
    /**
     * 线程死锁等待演示
     */
    static class SynAddRunalbe implements Runnable {
        int a, b;
        public SynAddRunalbe(int a, int b) {
            this.a = a;
            this.b = b;
        }
        @Override
        public void run() {
            synchronized (Integer.valueOf(a)) {
                synchronized (Integer.valueOf(b)) {
                    System.out.println(a + b);
                }
            }
        }
    }
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(new SynAddRunalbe(1, 2)).start();
            new Thread(new SynAddRunalbe(2, 1)).start();
        }
    }
}

最后

通过jconsole在windows平台算是一个所见即所得的好工具,不过现在很多开发真的很少用该工具来排查问题,希望本文对java开发同学在工作上有一定的帮助,辅助问题在本地解决。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 技术趋势 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档