`
jiasongmao
  • 浏览: 671434 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

JConsole使用指南(一)

阅读更多
    JConsole是JDK自带的东西,稳定性好,在大压力情况下也不会发生什么问题。而且,提供了相对全面的系统监控功能,值得一用。

Figure 1:
    JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动。如果要把一个应用以可管理的形式启动,可以在启动是设置com.sun.management.jmxremote。
例如,启动一个可以在本地监控的J2SE的应用Java2Demo ,需输入以下命令:
JDK_HOME/bin/java -Dcom.sun.management.jmxremote -jar JDK_HOME/demo/jfc/Java2D/Java2Demo.jar
JDK_HOME需要是一个含有JDK5.0的目录。
要启动JConsole,运行JDK_HOME/bin/jconsole一个用于连接的对话框将会打开。对话框的Local标签列出了所有本地正在运行的JVM,还包含进程的ID等信息。


Figure 2: Local Tab.

JConsole可以以三种方式连接正在运行的JVM:

Local:使用JConsole连接一个正在本地系统运行的JVM,并且执行程序的和运行JConsole的需要是同一个用户。JConsole使用文件系统的授权通过RMI连接器连接到平台的MBean服务器上。这种从本地连接的监控能力只有Sun的JDK具有。
Remote:使用下面的URL通过RMI连接器连接到一个JMX代理:

service:jmx:rmi:///jndi/rmi://hostName:portNum/jmxrmi

hostName填入主机名称,portNum为JMX代理启动时指定的端口。JConsole为建立连接,需要在环境变量中设置mx.remote.credentials来指定用户名和密码从而进行授权。

Advanced:使用一个特殊的URL连接JMX代理。一般情况使用自己定制的连接器而不是RMI提供的连接器来连接JMX代理,或者是一个使用JDK1.4的实现了JMX和JMX Rmote的应用。

当JConsole成功建立连接,它从连接上的JMX代理处获取信息,并且以下面几个标签页呈现信息。
Summary tab. 监控JVM和一些监控变量的信息。
Memory tab. 内存使用信息
Threads tab. 线程使用信息
Classes tab. 类调用信息
VM tab. JVM的信息
MBeans tab.所有MBeans的信息
MBeans tab展示了所有以一般形式注册到JVM上的MBeans。MBeans tab允许你获取所有的平台信息,包括那些不能从其他标签页获取到的信息。注意,其他标签页上的一些信息也在MBeans这里显示。另外,你可以使用 MBeans标签管理你自己的应用的MBeans

使用MBeans Tab监控和管理MBean

注册到JMX代理的平台或者应用的MBeans,可以通过MBeans标签获取。例如,内存的MBeans如下面定义
public interface MemoryMXBean {	    
public MemoryUsage getHeapMemoryUsage();	    
public MemoryUsage getNonHeapMemoryUsage();	    
public int  getObjectPendingFinalizationCount();	    
public boolean  isVerbose();	    
public void  setVerbose(boolean value);	    
public void  gc();	
}

内存的MBean包括四个属性:
HeapMemoryUsage. 用于描述当前堆内存使用情况的只读属性
NonHeapMemoryUsage. 用于描述当前的非堆内存的使用情况的只读属性
ObjectPendingFinalizationCount.用于描述有多少对象被挂起以便回收。
Verbose.用于动态设置GC是否跟着详细的堆栈信息,为一个布尔变量
内存的MBean支持一个操作——GC,此操作可以发送进行实时的垃圾回收请求。


Figure 3: MBeans Tab.

左边的树形结构以名字的方式展示了所有MBeans的列表。一个MBean对象的名字由一个域的名字和一串关键字属性组成。例如,JVM的平台的MBeans是在“java.lang”域下的一组,而日志的MBeans则在"java.util.logging"域下。MBean对象的名字在javax.management.ObjectName 规范中定义。

当你在树中选中一个MBean,属性,方法,或者通知等一些信息会再右边显示出来。如果属性是可写的(属性被标志为蓝色),你可以进行设置。你可以操作在Operations tab中列出的操作。你也可以看到由MBean发送出来的通知:默认情况,如果你不订阅通知的话,JConsole不会收到MBean发生过来的通知。你可以点击"Subscribe"(订阅)按钮来堆通知进行定义,而使用"Unsubscribe"按钮来取消订阅


Figure 4: MBeans Notification.
监控内存

内存标签页通过读取内存系统、内存池、垃圾回收的MBean来获取对内存消耗、内存池、垃圾回收的情况的统计。
图:

上图展示了内存随时间变化的使用情况。有对堆的、非堆的以及特殊内存池的统计。内存池信息是否能被获取,取决与使用的Java虚拟机。下面列表展示了HotSpot虚拟机的内存池情况。
Eden Space (heap): 内存最初从这个线程池分配给大部分对象。
Survivor Space (heap):用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。
Tenured Generation (heap):用于保持已经在 survivor space内存池中存在了一段时间的对象。
Permanent Generation (non-heap): 保存虚拟机自己的静态(refective)数据,例如类(class)和方法(method)对象。Java虚拟机共享这些类数据。这个区域被分割为只读的和只写的,
Code Cache (non-heap):HotSpot Java虚拟机包括一个用于编译和保存本地代码(native code)的内存,叫做“代码缓存区”(code cache)

详细信息区域给出一些当前线程的信息:
Used :已使用:当前的内存使用量。使用的内存包括所有对象(能被获取和不能被获取的)所占用的内存。
Committed :分配量:Java虚拟机保证能够获取到的内存量。分配内存(committedmemory)的量可能随时间改变。Java虚拟机可能释放部分这里的内存给系统,相应的分配的内存这时可能少于初始化时分配的给它的量。分配量总数大于或等于已使用的内存量。
Max :内存管理系统可以使用的最大内存量。这个值可以被改变或者不做设定。如果JVM试图增加使用的内存到大于分配量(committedmemory)的情况,内存分配可能失败,即便想使用的内存量小于或者等于最大值(如:系统虚拟内存比较低时)
Usage Threshold The usage threshold of a memory pool. This field will only beshown if the memory pool supports usage threshold.
GC time :垃圾回收使用的总时间和调用垃圾回收的次数。它可能有好几行,每行代表JVM使用的垃圾回收算法。(
右下角的棒状图表显示了被JVM的内存池消耗的内存。如果内存使用超过 usage threshold,则棒会变红。usagethreshold是用于支持内存检查的Memory Pool MBean的一个属性。MemoryPoolMXBean定义了一系列方法用于检查内存。
 public interface MemoryPoolMXBean {
....
// Usage threshold
public long    getUsageThreshold();
public void    setUsageThreshold(long threshold);
public boolean isUsageThresholdExceeded();
public boolean isUsageThresholdSupported();
// Collection usage threshold
public long    getCollectionUsageThreshold();
public void    setCollectionUsageThreshold(long threshold);
public boolean isCollectionUsageThresholdSupported();
public boolean isCollectionUsageThresholdExceeded();
}


每种内存池可能有两种内存初始话支持: usage threshold和collection usage threshold特殊的内存池可能两种都不支持。

Usage Threshold
usage threshold是内存池中一个可管理的属性。它使用低负荷的内存监控。设置usage threshold为正值则usage threshold检查内存池。设置usage threshold为零,则关闭检查。默认值由JVM设置。JVM一般让usage threshold在最合适的时候检查内存,典型的在GC的过程中和某些分配内存的时候。如果JVM发现当前的内存使用超过了usage threshold,它将会把UsageThresholdExceeded属性设置为true
有些内存池可能不支持usage threshold。你可以使用UsageThresholdSupported属性来判断一个内存池是否支持usage threshold。例 如,一个比较完善(generational garbage collector)的垃圾回收器(如HotSpot的虚拟机),most of the objects are allocated in the young generation,从eden内存池中产生。eden pool被设计成可以被装满;再eden pool中执行垃圾回收将会释放他

Collection Usage Threshold
Collection usage threshold是可进行垃圾回收的内存池的一个可配置属性。JVM堆一个内存池进行 垃圾回收以后,此内存池中的一些内存仍然被那些没有被回收的对象占用。collection usage threshold仅允许你在垃圾回收后对内存进行检查。如果JVM发现可用内存超出collection usage threshold,它将会设置CollectionUsageThresholdExceeded属性为true。
你可以使用CollectionUsageThresholdSupported属性来控制内存池释放支持 collection usage threshold.
usage threshold 和collection usage threshold是MBean标签中的一组。例如,在左边的树形结构中选择TenuredGen,设置tenured generation memory pool的usage threshold为6m。如下图所示


Figure 6: Setting Usage Threshold.

当 TenuredGen memory pool的内存使用超过6MBytes时,代表 TenuredGen memory pool的柱状图将会呈现红色来代表使用的内存超过了usage threshold。代表堆内存的柱状图也将变为红色。你可以选择柱状图或者在图表中指定内存池来查看某个指定内存池的信息。如果把鼠标房子柱状图上,将会显示出内存池的名字


Figure 7: Low Memory.

开启/关闭虚拟机的详细跟踪
如上所述,内存系统的MBean定义了一个叫做Verbose布尔变量,让你能动态的打开或关闭详细的GC跟踪。详细的GC跟踪,将会在JVM启动时显示。默认的HotSpot的GC详细输出为stdout.


Figure 8: Setting Verbose GC. 死锁检查

线程标签页提供关于应用的线程运行信息


Figure 9: Threads Tab.

左下角列出了所以正在运行的线程。如果你在过滤器中输入一个字符,线程列表将仅显示线程名字包含你输入字符的线程。通过点击某个线程,你可以获取这个线程的相关信息。

线程的MBean标签提供了一些Thread标签没有提供有用的操作。

findMonitorDeadlockedThreads. 如果发生线程死锁,可以通过这个检查出来。操作返回一组死锁的线程ID
getThreadInfo. 返回线程的信息。包括线程的名称、堆栈信息,导致当前线程阻塞的锁,如果有的话,还返回哪儿线程持有这个锁,和这个线程信息的统计。
getThreadCpuTime.返回指定线程消耗的CPU时间。
为使用上面这些属性,可以到MBeans标签下,在MBeans树上选择Threading MBean。它列出了当前监控的JVM所有属性的操作。


本文章转载至csdn,转载地址:http://blog.csdn.net/ruixj/archive/2007/11/07/1872104.aspx



分享到:
评论

相关推荐

    JConsole用户指南

    jconsole用户指南 sun microsystem官方文档

    jconsole使用

    **标题:“jconsole使用”** **内容概览:** `jconsole`是Java开发和...《jdk50_ts_guide.pdf》提供了关于JDK 5.0技术专题的详细指南,包括`jconsole`的使用和其他JDK工具的介绍,是学习和理解JMX监控的重要参考资料。

    jconsole远程监控配置手册(经典)

    本文档旨在提供一份详细的jconsole远程监控配置指南,适用于需要对生产环境中的Tomcat应用服务器进行远程监控的场景。通过本指南,用户可以了解到如何正确配置Tomcat服务器以支持远程监控功能,以及如何在客户端上...

    LambdaProbe监控Tomcat 和Jconsole 监控Tomcat

    在“JConsole监控Tomcat.txt”文件中,很可能包含了使用JConsole监控Tomcat的具体步骤、配置指南或者是一些最佳实践。通常,这可能涵盖如何启动JConsole,连接到Tomcat进程,以及如何解读监控数据等内容。 总的来说...

    JBOSS使用指南,JMX原理和应用,EJB3.0使用说明

    2. 使用JConsole或JVisualVM:这些工具可以连接到JBoss实例,通过JMX接口查看和调整服务器配置,监控性能指标。 3. 自定义MBeans:开发者可以创建自己的MBeans,扩展管理功能。 三、EJB3.0使用说明 EJB(Enterprise...

    JBOSS 4.2.2GA 使用指南

    **JBOSS 4.2.2GA 使用指南** JBOSS是一款开源的企业级Java应用服务器,基于Java 2企业版(J2EE)规范。JBOSS 4.2.2GA是其一个特定的稳定版本,发布于2007年,提供了一个全面的平台来部署和管理各种Java应用程序和...

    java 性能权威指南

    《Java性能权威指南》是一本深入探讨Java平台性能优化的专业书籍。这本书全面涵盖了从JVM(Java虚拟机)内部机制到应用程序级别的各种性能问题,旨在帮助开发者和系统管理员理解并解决Java应用程序中的性能瓶颈。 ...

    VisualVM入门指南 使用说明 新手上路

    它集成了多种原本独立存在的命令行工具,如`jstat`, `JConsole`, `jstack`, `jmap`, 和 `jinfo`,并通过一个统一的图形用户界面(GUI)提供了更加直观的使用体验。 - **核心功能**: - **监视**:监控Java应用程序...

    VisualVM-入门指南.docx

    VisualVM 入门指南 VisualVM 是一个功能强大且免费的 Java 应用程序监控和分析工具,旨在提供 Java 虚拟机 (Java Virtual Machine, JVM) 上运行的 Java 应用程序的详细信息。 VisualVM 能够提供强大的分析能力,...

    JDK12-tools-reference.pdf

    本指南旨在提供 Oracle JDK 12 工具的详细参考信息,涵盖 Java 平台标准版工具的使用、配置和管理。该指南面向开发者、管理员和用户,旨在帮助他们更好地理解和使用 JDK 12 工具。 一、JDK 12 工具概述 JDK 12 ...

    Java性能调优指南.pptx

    1. **JVM工具箱**:使用JDK自带的JConsole、VisualVM等工具,或者第三方工具如JProfiler、YourKit等,可以帮助监控和分析JVM行为,找出性能瓶颈。 2. **JVM选项**:调整JVM参数可以显著影响性能,例如`+XX:+...

    jboss服务器配置指南

    JBoss服务器是一款开源的企业级应用服务器,基于Java EE标准,由Red Hat公司开发并维护。本配置指南将深入探讨JBoss服务器的配置和优化,帮助你更好地理解和管理这个强大的平台。 1. **安装与启动** - JBoss的下载...

    安装jetty相关指南

    以下是一份详细的Jetty安装指南,适合初学者参考。 **一、下载Jetty** 1. 首先,你需要访问Jetty的官方网站(https://www.eclipse.org/jetty/)或其GitHub仓库(https://github.com/eclipse/jetty.project/releases...

    springside优化指南

    此外,使用JVM监控工具如JVisualVM和JConsole可以实时监控JVM的运行情况,根据应用的特性和运行状态进行相应的调优。 集合性能优化是指在开发中对Java集合框架进行性能考量,选择合适的集合类型,并优化集合操作的...

    一份超级详细的Java面试题【大厂面试真题+Java学习指南+工作总结】.rar

    这份“一份超级详细的Java面试题【大厂面试真题+Java学习指南+工作总结】”资料集合了众多大厂的面试真题,对于求职者来说是一份宝贵的资源。以下是基于这个压缩包内容可能涵盖的一些关键知识点: 1. **Java基础** ...

    JDK16-java-se-monitoring-and-management-guide.pdf

    1. jconsole:jconsole 是一个基于图形化界面的监控工具,允许开发者实时监控 Java 应用程序的性能和资源使用情况。 2. jvisualvm:jvisualvm 是一个基于图形化界面的监控工具,允许开发者实时监控 Java 应用程序的...

Global site tag (gtag.js) - Google Analytics