一、简介

JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,它是Java自带的简单性能监控工具。下面以对tomcat的监控为例,带领大家熟悉JConsole这个工具。

二、配置

通过JConsole远程连接服务器监控JVM,需要在被监控的服务器上tomcat的启动文件catalina.sh中加入以下配置:

JAVA_OPTS="-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.182.130 -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 

JMX的相关参数:

参数名

类型

描述

-Dcom.sun.management.jmxremote

布尔

是否支持远程JMX访问,默认true

-Dcom.sun.management.jmxremote.port

数值

监听端口号,方便远程访问

-Dcom.sun.management.jmxremote.authenticate

布尔

是否需要开启用户认证,默认开启

-Dcom.sun.management.jmxremote.ssl

布尔

是否对连接开启SSL加密,默认开启

-Dcom.sun.management.jmxremote.access.file

路径

对访问用户的权限授权的文件的路径,默认路径JRE_HOME/lib/management/jmxremote.access

-Dcom.sun.management.jmxremote. password.file

路径

设置访问用户的用户名和密码,默认路径JRE_HOME/lib/management/ jmxremote.password

 

三、连接

在cmd中运行Jconsole命令

java实现类似findinset java实现类似jconsole功能_java实现类似findinset

服务器ip,端口,是设置JMX参数时的值,用户名密码是连接服务器时的用户名密码

四、模块介绍

概览

java实现类似findinset java实现类似jconsole功能_用户名_02

  1、概要界面,主要显示堆内存使用情况、活动线程数、加载类数、CPU使用率四个参数的概要,可以通过下拉框来定制显示的时间范围

  2、假如堆内存的图像一直在上升而没有下降的动作发生,则要怀疑是否内存泄露。健壮的项目由于GC的存在,所以它的上升和下降的幅度应该大抵相同

  3、CPU的图像规律跟堆内存的大致相同

内存

java实现类似findinset java实现类似jconsole功能_tomcat_03

  1、图示为被监控程序的详细内存图

  2、点击右上的执行GC按钮可以通知JVM进行垃圾回收,执行的是Full GC,实质是把垃圾回收队列的优先级提高

  3、GC 时间显示了垃圾回收的时间以及回收数,上面的是Young GC执行的时间和次数,下面的是Full GC执行的时间和次数

  4、右下角的图案,Heap内存区包括:年轻代Eden Space、存活代Survivor Space和老年代Tenured Gen。Non-Heap内存区包括:代码缓存区Code Cache和持久代Perm Gen;可通过改变下拉框或者直接点击图形实现切换。

线程

java实现类似findinset java实现类似jconsole功能_tomcat_04

  1、“峰值”表示最大的线程数,这个数值可以通过更改<tomcat_home>/conf/server.xml下的maxThreads来更改

  2、点击具体的线程之后,我们可以看到它的状态以及方法栈的详细调用情况

  3、点击“检查死锁”可以检测是否有死锁

java实现类似findinset java实现类似jconsole功能_tomcat_05

关注点:类的数量变化

VM概要

java实现类似findinset java实现类似jconsole功能_JVM_06

  1、上面几栏是关于系统和项目的概要信息

  2、最下面一栏的第一项是tomcat设定的JVM参数,如果你想知道你设置的参数有没有成功启用,看这里就对了

MBean

java实现类似findinset java实现类似jconsole功能_用户名_07

属性显示该bean的详细细节

java实现类似findinset java实现类似jconsole功能_java实现类似findinset_08

操作显示该bean的所有方法,可以点击该按钮触发方法,但个人不推荐这么做,应该通过程序的统一入口来触发