【JVM 监控工具】使用JConsole监控进程、线程、内存、cpu、类情况

您所在的位置:网站首页 w10怎么看内存使用情况 【JVM 监控工具】使用JConsole监控进程、线程、内存、cpu、类情况

【JVM 监控工具】使用JConsole监控进程、线程、内存、cpu、类情况

2024-01-06 19:05| 来源: 网络整理| 查看: 265

文章目录 前言一、如何启动JConsole二、如何设置JAVA程序运行时可以被JConsolse连接分析三、JConsole如何连接远程机器的JAVA程序(举例说明)四、性能分析概述内存线程类VM摘要MBean 五、使用Jconsole监控某方法的性能总结

前言

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程序(举例说明)

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

另外一台机器进行连接

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毕竟是JDK自带的东西,功能虽然没有一些商业软件那么强大,但是稳定性好,在大压力情况下也不会发生什么问题。而且,提供了相对全面的系统监控功能,还是值得一用的。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3