美文网首页
使用Jconsole监控进程性能

使用Jconsole监控进程性能

作者: 不知名的蛋挞 | 来源:发表于2018-11-17 22:08 被阅读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使用情况做了个统一的监控并实时显示,这里个页面就可以很有效的全面监视资源的使用情况了,有以下六个标签:

    • 概述: Displays overview information about the Java VM and monitored values.
    • 内存:显示内存使用信息
    • 线程:显示线程使用信息
    • :显示类装载信息
    • VM摘要:显示java VM信息
    • MBeans:显示 MBeans.

    【概述】

    【内存】

    这个比较有价值,参看堆内存,非堆内存,内存池的状况总体内存的分配和使用情况以及不同的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这个本地进程:

    相关文章

      网友评论

          本文标题:使用Jconsole监控进程性能

          本文链接:https://www.haomeiwen.com/subject/jkmifqtx.html