JConsole 的图形用户界面是符合Java 管理扩展(JMX) 规范的监视工具。 JConsole 使用Java 虚拟机(Java VM) 为Java 平台上运行的应用程序提供性能和资源消耗信息。在Java 平台标准版(Java SE 平台)6 中,JConsole 已更新为与Windows 和GNOME 桌面类似的当前外观(其他平台包括标准Java 图形),如本文所示。文档屏幕截图是在Windows XP 上运行的界面示例。
Jconsole 是一个可执行文件。如果jconsole路径设置为环境变量,则该文件下会有一个bin文件。在开始菜单中打开它。直接在run命令中输入jconsole命令来运行jconsole程序。如果没有设置为环境变量,则必须写入完整路径。
有两种方法可以启动JConsole 程序。一种方法是带参数启动,另一种是不带参数启动。
带参数启动JConsole有两种情况。一种用于本地进度监控,一种用于远程监控。
本地监控命令格式如下:
JConsole进程ID
processID 是指应用程序的进程ID (PID)。您可以使用以下方法确定应用程序的PID:
在UNIX或Linux系统上,您可以使用ps命令查找正在运行的Java实例的PID。
在Windows系统上,您可以使用任务管理器找到java或javaw进程的PID。
示例:如果您监控JConsole 程序,且JConsole 的进程号为5604,则可以使用以下命令启动JConsole:
J控制台5604
远程监控命令格式如下。
JConsole 主机名:portNum
hostname 是需要监控的主机,portNum 是您在启动Java 虚拟机时指定的JMX 代理端口号。
注意:虽然使用JConsole 监控本地应用程序对于开发和创建原型非常有用,但Jconsole 本身也消耗大量系统资源,不建议用于生产环境。
当您运行Jconsole 程序而不指定任何参数命令时,将出现Jconsole New Link 对话框,如图所示。
Jconsole有两种监控方式:本地进程监控和远程监控。
选择本地进程监控。下面的列表框中列出了与JConsole 程序相同的用户的进程。选择其中一个进程,点击连接按钮,即可显示监控主界面。
选择包含您想要的内容的远程监控。 JMX代理的主机名和端口号以及访问服务器的用户名和密码。
连接成功后,会弹出监控界面,如图所示。
监控的内容主要包括六个方面:概览、内存、线程、类、VM概览、MBeans。
概要信息
摘要信息监控界面主要包括堆内存使用情况、线程数、Java VM 中加载的类、CPU 使用情况等。选择每个视图可在监控时间段之间切换,并将视图中的数据保存到逗号分隔值(CSV)文件中。
内存信息
内存监控信息主要提供内存消耗和内存池信息,如图所示。
内存监控信息主要监控两类内存消耗信息:堆内存和非堆内存。这两种类型的内存也是在Java虚拟机启动时创建的。
堆内存是一个固定或可变大小的堆,Java VM 中的所有类实例和数组都从中分配内存。
非堆内存包含所有线程和Java虚拟机内部处理或优化所需的共享方法。包含类结构、运行常量池、字段和方法数据、以及方法和构造函数代码。方法区逻辑上是堆的一部分,具体取决于具体实现。根据实现的不同,Java 虚拟机可能不执行垃圾收集或压缩。与堆内存一样,方法区域可以是固定大小或可变大小,并且方法区域内的内存不必是连续的。
除了方法空间之外,Java 虚拟机可能还需要执行非堆内存的内部处理或优化。例如,即时(JIT) 编译器需要内存来存储从Java 虚拟机中的高性能代码转换而来的机器代码。
Jconsole提供的监控的堆内存和非堆内存主要包括以下几类:
Eden Space内存池:大部分对象初始化时分配的内存池。
Survivor Space内存池:这个内存池中包含的对象是回收Eden Space内存池后幸存下来的对象。
Tenured Gen内存池:这个内存池包含的对象是已经在Survivor Space内存池中存在一定时间的对象。
代码缓存内存池:包含HotSpot Java VM的代码缓存以及编译和存储代码所消耗的内存。
Perm Gen[shared-rw]内存池:Perm Gen内存池中的读写区域。
Perm Gen[shared-ro]内存池:Perm Gen内存池内的只读区域。
Perm Gen Memory Pool:该内存池包含虚拟机本身反映的数据,例如类、方法等。 Java 虚拟机在运行时共享这些类数据区域。共享区域有两种模式:只读和只读。写。
通过图形下拉列表框可以选择不同的内存池来监控并获取当前内存池消耗的内存信息。此外,当您切换时,您将看到堆和非堆图标。内存池图表的显示内容也会根据显示的图表而变化。如果显示为红色,则表示内存使用量超过内存阈值。
内存池和内存管理器是Java虚拟机内存系统中的重要环节。
内存池代表Java虚拟机管理的一块内存区域。一台Java虚拟机至少有一个内存池,在执行过程中可以创建或删除内存池。内存池可以属于堆内存或非堆内存。
内存管理器管理一个或多个内存池。垃圾收集器负责回收无法访问的对象使用的内存。您可以在Java 虚拟机运行时向其添加或删除一个或多个内存管理器。内存池可以由多个内存管理器管理。
内存使用情况详细信息显示在“详细信息”框中。主要包括以下信息:
已使用:当前正在使用的内存量(包括已使用的、可用的或未声明的内存)。
分配:分配的内存必须满足Java虚拟机的要求。分配的内存可能会随着时间而改变。分配的内存可能小于初始启动时分配的内存量。分配的内存大于或等于所需的内存量。
最大:可用于内存管理的最大内存。该值是变化的或不确定的。如果Java虚拟机使用的内存持续增加并超过了分配的内存量,则内存分配将会失败。
GC时间:累积垃圾收集时间和总调用时间。可能包含多行。每行代表Java 虚拟机的垃圾收集器算法所消耗的时间。
垃圾收集(GC垃圾收集)是Java虚拟机释放不再被引用的对象所占用的内存的一种机制。通常,我们考虑当前处于活动状态的“活动”对象以及无法引用或检索的对象。对于对象来说,垃圾收集是释放“死”对象占用的内存的过程。垃圾收集算法和参数对性能有重大影响。
Java HotSpot虚拟机垃圾收集器使用分代GC。分代GC的大部分好处与以下总结一致:
创建短期对象,例如迭代器和局部变量。
创建一些长期存在的对象,例如高级持久对象。
分代GC分为多个世代,每个世代分配一个或多个内存池,当一个世代使用分配的内存时,虚拟机上会执行一次本地GC(也称为次要收集)来回收内存。这种部分GC 通常比完整GC 快得多,因为内存被死对象使用。
Java HotSpot 虚拟机定义了两代:年轻代(有时称为“托儿所”)和年老代。年轻一代包括一个“伊甸园空间”和两个“幸存者空间”。最初,VM 将所有对象放置在'.当执行minor GC时,VM将剩余的对象从“Eden Space”转移到“Survivor Space”并创建虚拟的长寿命对象。一旦老年代满了,就会进行一次full GC,而永久代则包含了所有的虚拟反射,所以往往会非常慢。机器本身的所有数据,例如类和方法。
如果垃圾收集器是瓶颈,您可以通过自定义生成大小来提高性能。
线程信息
线程监控信息如图所示。
所有活动线程都显示在左下角的线程列表中。如果您需要搜索指定话题,请在“过滤器”字段中输入要搜索的话题并选择该话题。右侧出现一个文本框,显示当前线程的名称、状态和堆栈跟踪信息。
上面的线程数视图动态显示当前活动线程数。这主要包括两部分:当前活跃线程数和峰值线程数。
线程监控视图还具有检测死锁线程的能力。如果线程对象监控发生死锁,则显示发生死锁的线程的ID号,并显示当前线程的信息。被展示。
Java虚拟机线程信息的所有属性和操作都可以在MBeans选项卡上监控。
班级信息
该图显示了类监控信息。
已加载类计数视图显示已加载类和当前已加载类的总数。事实上,红线显示了加载的类总数,蓝线代表了当前加载的类。详细信息显示当前加载的类、加载的类总数和卸载的类总数。
虚拟机摘要信息
该图显示了VM摘要监控信息。
VM摘要信息主要包括五个方面的信息:摘要信息、线程和类信息、内存信息、操作系统信息和其他信息。
概述部分的信息主要包括:
连接名称:连接监控时处理PID信息。
执行时间:Java虚拟机自启动以来运行的总时间。
处理CPU时间:启动Java VM,消耗的总CPU时间。
Total Compile Time:JIT编译所花费的累计时间。
线程和类信息主要包括:
活动线程:当前活动线程。
Peak:最大线程数。
守护线程:在后台运行的线程。
启动的线程总数:到目前为止启动的线程数。
当前加载的类:当前运行进程中加载的类总数。
加载的类总数:到目前为止加载的类总数。
卸载的类总数:到目前为止卸载的类总数。
内存信息主要包括以下信息:
当前堆大小:当前堆分配的内存空间。
已分配内存:当前分配的内存大小。
最大堆大小:堆分配的最大内存量。
挂起结束操作:当前暂时挂起的对象。
垃圾收集器:垃圾收集器描述了收集器的名称、收集器收集的内存量以及收集此内存所花费的时间。
操作系统信息主要包括操作系统名称、体系结构、分配的虚拟内存、总物理内存、可用物理内存、总交换空间和可用交换空间。
其他信息主要包括:
VM参数:显示通过应用程序发送到Java虚拟机的参数。这些参数不包括主要方法参数。
Classpath:系统类加载器用来搜索类文件的类路径。
库路径:加载库时要搜索的路径列表。
引导类路径:引导类加载器搜索类文件的路径列表。
MBean信息
MBeans 选项卡显示MBean 服务器注册的MBean 类。此外,您还可以监视和管理应用程序的MBean 信息。
左侧显示所有当前正在运行的MBean。当在MBean 树中选择MBean 时,右侧会显示当前所选MBean 的MBeanInfo 和描述符信息。下面将显示通知信息。
MBean 属性
在MBean 树中选择一个MBean,然后单击“属性”节点以显示该MBean 的所有属性,如图所示。
当您在“属性”下选择单个属性时,右侧会显示当前属性的详细信息,如图所示。
单击属性值(右侧粗体)可展开详细的属性值信息。 HeapMemoryUsage 属性的扩展值如图所示。
双击属性值可更改显示值。该图显示了线程的CurrentThreadUserTime 属性值。
MBean操作
在MBean 树中选择一个MBean,然后单击“操作”节点以显示与该MBean 相关的所有操作,如图所示。
单击操作调用按钮即可调用这些方法。单击方法会显示当前方法的详细信息,如图所示。
Mbean 通知
当您在MBean树中选择一个MBean时,单击Notifications节点,然后选择一个通知,右侧会显示该通知的详细信息,以Memory为例,如图所示。
版权声明:本文转载于今日头条,版权归作者所有。如有侵权,请联系本站编辑删除。