使用Jconsole监控进程性能

2018-11-17  本文已影响9人  不知名的蛋挞

介绍

Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到。它用于连接正在运行的本地或者远程的JVM,对运行在java应用程序的资源消耗和性能进行监控,并画出大量的图表,提供强大的可视化界面。而且本身占用的服务器内存很小,甚至可以说几乎不消耗。

如何启动JConsole

可以从命令行(直接输入jconsole)或在 GUI shell (jdk\bin下打开)中运行。

当分析工具弹出时(取决于正在运行的 Java 版本以及正在运行的 Java 程序数量),可能会出现一个对话框,要求输入一个进程的 URL 来连接,也可能列出许多不同的本地 Java 进程(有时包含 JConsole 进程本身)来连接。如图所示:

想分析那个程序就双击那个进程。

如何设置JAVA程序运行时可以被JConsolse连接分析

本地程序(相对于开启JConsole的计算机),无需设置任何参数就可以被本地开启的JConsole连接(Java SE 6开始无需设置,之前还是需要设置运行时参数 -Dcom.sun.management.jmxremote)

JConsole如何连接远程机器的JAVA程序(举例说明)

  1. 写一个简单的一直运行的JAVA程序,运行在某台机器上如(192.168.0.181)

  2. 另外一台机器进行连接

jconsole.exe 192.168.0.181:8999  

也可以在已经打开的JConsole界面操作 连接->新建连接->选择远程进程->输入远程主机IP和端口号->点击“连接”,如图:

然后就会进入分析界面。

性能分析

进入概述页面,可以看到堆内存,线程,类,CPU使用情况做了个统一的监控并实时显示,这里个页面就可以很有效的全面监视资源的使用情况了,有以下六个标签:

【概述】

【内存】

这个比较有价值,参看堆内存,非堆内存,内存池的状况总体内存的分配和使用情况以及不同的GC进行垃圾回收的次数和时间。可以手动进行GC查看内存变化。

【线程】

左下角显示所有的活动线程(如果线程过多,可以在下面的过滤栏中输入字符串过滤出你想要观察的线程)。点击某个显示会显示这个线程的名称、状态、阻塞和等待的次数、堆栈的信息。

统计图显示的是线程数目的峰值(红色)和当前活动的线程(蓝色)。另外下面有个按钮“检测到死锁”,有时候会有用处。

【类】

【VM摘要】

【MBean】

使用Jconsole监控某方法的性能

如果想监控分析系统项目代码里面某个方法的性能(如使用的CPU、GC情况),可以单独跑这个方法。如我要测试系统MC缓存刷新使用的内存和CPU,我先写了下面这样一个main类:

public class mcTest {

    public static void main(String[] args){
        try {
            // 休眠1分钟,让我有时间开启jconsole
            Thread.sleep(60000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.setProperty("spring.profiles.active", "development");
        ApplicationContext instance = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 手动启动spring容器,获取缓存刷新job类
        McRemoteCacheJob mcRemoteCacheJob= (McRemoteCacheJob )instance.getBean("mcRemoteCacheJob");
        adsRemoteCacheJob.doJob();
    }
}

运行main类,然后开启jconsole,选择mcTest这个本地进程:

上一篇下一篇

猜你喜欢

热点阅读