编辑
2024-03-12
实用工具
00
请注意,本文编写于 387 天前,最后修改于 387 天前,其中某些信息可能已经过时。

目录

介绍
使用
概览
内存
线程
VM
MBean

介绍

jconsole 是 Java Development Kit (JDK) 自带的一款图形化监控和管理工具。它旨在提供一个简单而强大的界面,用于监视和管理 Java 应用程序在 Java 虚拟机 (JVM) 上的运行情况。

jconsole 提供了可视化的方式来获取有关 Java 应用程序的各种信息,包括内存使用情况、线程活动、GC 行为等重要指标。它还允许远程连接到运行中的 Java 进程,提供对远程应用程序的监控和管理能力。

jconsole命令特征如下:

  • 实时监控:实时获取应用程序的性能指标,如 CPU 使用率、内存使用情况、线程活动等;
  • 线程分析:可以查看运行中的线程及其状态,并进行死锁检测和线程 Dump 分析;
  • 垃圾回收:提供了对 Java 垃圾回收器的监控和调整功能;
  • MBean 支持:支持查看和管理 MBean (管理 Bean) 对象,用于监控和管理应用程序的各个组件;
  • 远程连接:可以连接到远程主机上运行的 Java 进程,并对其进行监控和管理。

优点:

直观易用:jconsole 提供了直观的用户界面,使得监控和管理 Java 应用程序变得更加容易;

实时监测:可以实时查看应用程序的性能指标,并根据需要进行调整和优化;

远程监控:可以连接到运行在远程主机上的 Java 进程,方便地进行远程监控和管理。

缺点:

功能有限:相比其他更为专业的监控工具,jconsole 的功能相对简单,并不适用于高级的监控和故障排除需求;

效能损耗:在连接到远程应用程序时,jconsole 可能会对目标应用程序的性能产生一定程度的影响。

使用

Jconsole工具查看程序的资源占用请求。安装jdk时bin目录有jconsole.exe工具,或者通过 Win + R,输入jconsole.exe启动jconsole( 可以从命令行直接输入jconsole)

选择本地登录或者远程登录 1710231623820.jpg

登录后可以看到界面上,有概览\内存\线程\类\VM概要等信息

概览

主要是对于堆\线程\类\cpu使用的实时响应使用状态

内存

JConsole可以显示当前内存的详细信息。这里不仅包括堆内存的整体信息,更细化到了eden区、survivior区及老年代的使用情况,同时也包括非堆区,即永久代的使用情况。单击右上角的“执行GC”按钮,可以强制应用程序进行一次FullGC操作

堆和非堆内存

Java虚拟机管理两种内存:堆和非堆内存,这两者都是Java虚拟机启动时创建的。

  • 堆内存是运行时数据区域,Java VM的所有类实例和数组分配内存。 可能是固定或可变大小的堆。
  • 非堆内存包括在所有线程和Java虚拟机内部处理或优化所需的共享的方法。 它存储了类的结构,运行常量池,字段和方法数据,以及方法和构造函数的代码,方法区在逻辑上是堆的一部分,看具体实现的方式。根据实现方式的不同,Java虚拟机可能不进行垃圾收集或压缩。 堆内存一样,方法区域可能是一个固定或可变大小。 方法区的内存不需要是连续的。
  • 除了方法区,Java虚拟机可能需要进行内部处理或优化,这也属于非堆内存的内存。 例如,实时(JIT)编译器需要内存用于存储从Java虚拟机的高性能的代码翻译的机器码。

线程

JConsole中的“线程”选项卡允许开发人员监控程序内的线程。JConsole显示了系统内的线程数量,并在屏幕下方显示了程序中所有的线程。单击线程名称,便可以查看线程的栈信息。(如果线程过多,可以在下面的过滤栏中输入字符串过滤出你想要观察的线程)

统计图显示的是线程数目的峰值(红色)和当前活动的线程(蓝色)。

线程选项卡提供了几个有用的操作。

  • findMonitorDeadlockedThreads:检测,如果任何线程对象监视器锁定陷入死锁。 此操作返回一个死锁的线程ID数组。
  • getThreadInfo:返回线程的信息。 这包括名称,堆栈跟踪和监测锁,该线程目前已封锁,如果有的话,哪个线程持有该锁,以及线程争用统计。
  • getThreadCpuTime:返回给定的线程所消耗的CPU时间

查看加载和卸载的类信息

VM

JConsole显示了当前应用程序的运行环境,包括虚拟机类型、版本、堆信息及虚拟机参数等

MBean

通过JConsole进行MBean管理,包括查看或者设置MBean的属性,以及运行MBean的方法等。如图示为MBean的管理界面,这里选中了Memory的Verbose属性。通过修改Verbose的属性值,可以在程序运行时动态打开或者关闭GC操作的输出信息。

本文作者:Weee

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!