`
足至迹留
  • 浏览: 486296 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

<jconsole-1> 用法简介

阅读更多
Jconsole(Java Monitoring and Management Console)是从java5开始,在JDK中自带的java监控和管理控制台,用于对JVM中内存,线程和类等的监控,是一个基于JMX(java management extensions)的GUI性能监测工具。jconsole使用jvm的扩展机制获取并展示虚拟机中运行的应用程序的性能和资源消耗等信息。

jdk5和jdk6中jconsole的主要区别
JDK 5中 Java应用(JVM)启动时必须将JMX注册到 MBeanServer中,JConsole才能监控到该JVM。即Java应用启动时要加 -Dcom.sun.management.jmxremote 启动参数。
JDK 6中 JConsole可以从%TMP%/hsperfdata_user ( user 为当前登录用户名)目录下得到启动的JVM的信息。因此Java应用启动时可以不用添加 -Dcom.sun.management.jmxremote 启动参数。鉴于目前大多数程序都是jdk6或以上,所以这里也不再强调jdk5上该程序的使用了。

一.(jdk6或以上)启动JConsole
我们可以在JDK_HOME/bin找到jconsole程序,可以直接在命令行或双击jconsole.exe文件来启动它。
JConsole可以用来监控本地应用(也就是说和jconsole运行在同一台机器上的应用)或远程应用程序(也就是和jconsole运行在不同系统或用户下的程序)。

注意:在开发环境或创建原形系统时使用Jconsole来监控本地应用非常有用。但不建议在生产环境下使用jconsole来监控本地应用,因为jconsole本身也会消耗重要的系统资源。此时推荐使用jconsole远程监控应用,保持jconsole和被监控的程序隔离。

1.1 启动本地监控
可以在命令行启动jconsole,如果jconsole已经在系统路径下可以直接输入:
>jconsole
就可以启动,否则可以输入全路径来启动。
只要jconsole启动,就会弹出选项包含所有和jconsole在同一个用户下的应用,选择某一个来连接。
如果我们已经知道想要监控的应用的进程id(pid),我们也可以在命令行里直接指定,此时这个pid必须和jconsole运行在同一个用户下(因为管理和监控系统使用操作系统的文件许可),命令行如下:
>jconsole pid

获取进程id的方法:
1)在unix或linux下可以使用ps命令查找java应用的pid。
2)windows下可以使用资源管理器(Task Manager),在查看>选择列…>pid即可。
3)无论什么系统,还可以使用jdk自带的jps命令查看所有java应用的pid。

1.2 启动远程监控
可以使用命令行启动远程监控:
>jconsole hostName:portNum
hostName是被监控应用的主机名,portNum是启动jvm时指定的jmx代理的端口号。
如果应用允许被远程监控,那么启动jvm时必须指定系统属性:
com.sun.management.jmxremote.port=portNum
注意要使用未被使用过的端口。
如在jboss的配置文件中添加远程服务端口:
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=$HOSTNAME"


或在tomcat的catalina.bat里加入:
set JAVA_OPTS= -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false


参考:http://docs.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdenl

1.3 启动安全远程监控
还可以启用使用ssl(Secure Sockets Layer)安全连接的jconsole。
可以参考:
http://docs.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevo

1.4 连接示例
如果不带任何参数的启动jconsole,我们会看到下面的对话框:


local process选项里列出的是所有和jconsole在同一个用户下的本地应用程序,如果显示为灰色的则不能连接,有可能是在jdk5上启动的应用并且没有指定-Dcom.sun.management.jmxremote 或 com.sun.management.jmxremote.port选项。其他非灰色的列表项选择其中一个并点击右下角的connect就可以连接。

如果要监控remote process,则需要提供hostName:portNum和用户名/密码。如:


二. 功能介绍
jconsole一旦连接上应用,就可以看到6个tab页。分别是:
概述(overview):展示监控到的jvm概述信息。
内存(memory):内存使用的详细统计信息。
线程(threads):线程使用信息。
类(classes):类加载信息。
vm摘要(vm):jvm的信息摘要。
Mbeans: mbeans信息。
可以使用菜单栏的菜单选项随时退出或重新连接。

2.1 概述
这里图形化的同时展示了堆内存使用情况,线程,类,cpu使用情况。
可以在每个图形上面右键选择展示的时间段和保存数据。


2.2 内存使用情况


这里有个”Perform GC”(执行GC)的按钮,可以随时点击触发GC。
这个tab页上展示了堆内存,非堆内存和特定内存池的内存使用情况,可以在”Chart”和”Time Range”上选择展示哪个内存区域哪个时间段内的使用情况。

对于HotSpot jvm,内存大致分为heap区和非heap区。heap区是分代管理的,堆内存大致又分为新生代和老年代。新生代分为Eden space和Survivor space。老年代就是Tenured Gen。
非heap区又分:Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java虚拟机栈)、Local Method Statck(本地方法栈)。具体可以参考jvm相关资料。

在这个图上可以选择其中某个区域来观测。
在左下角的”Detail”部分可以看到几个内存度量值:
1)已使用:当前已经使用的内存,包括所有对象占用的,可达的不可达的部分。
2)分配:当前应用jvm可以使用的内存,这个值会随时间变化。因为jvm可能会释放内存。分配的内存值总会大于或等于已使用的内存。
3)最大值:当前可使用的最大值。这个值也会随时间变化,因为jvm可能会尝试扩展内存。jvm里配置的内存可能是个范围,当内存不够用时会尝试扩展内存直到达到设置的最大值。
4)GC时间:gc累计花费的时间和调用的次数。这个可能会有多行,分别代表jvm使用的gc算法的统计。

图的右下角的柱状图展示的堆和非堆内存使用情况,正常情况下展示的是绿色,如果设置了内存使用阀值(在Mbeans的tab页中可以设置属性MemoryMXBean来指定内存的UsageThreshold值),超过阀值就会显示红色。

2.3 线程使用


左下角“Threads”列出的是所有活动的线程,点击某个线程名字可以展示线程名字,状态和堆栈信息。可以在最下面的”Filter”框中输入模糊匹配字符串过滤线程。图的上面部分展示了红色线代表线程的峰值。蓝色代表当前的线程数。

此外,Mbeans标签页的java.lang>threading>操作下面提供了一系列线程相关功能,比如:
findMonitorDeadlockedThreads:检测死锁,返回死锁的线程id数组,如果没有则返回null.
getThreadInfo:返回线程信息。包括线程名称,堆栈信息,如果线程阻塞,则展示阻塞在哪个锁上,并且哪个线程持有这个锁。

还可以点击本tab页最下面的“Detect DeadLock”来检测是否有死锁。


2.4 类加载监控和vm信息





这两部分信息比较明显,从名字上都能看出统计的信息。

2.5 监控和管理MBeans
最后这个标签页展示了所有注册的MBeans。


左边的树展示了当前所有运行的MBean,选择展开其中一个,就会它的所有描述,如属性,操作或通知。所有平台MXBean和各种操作和属性都可以通过JConsole的MBeans选项卡访问。

目前个人对于MBean的使用还不多,理解也很肤浅,暂时不多介绍了,以后再补充。

在查阅资料过程中发现jvisualvm,可以参考:
http://developer.51cto.com/art/200906/130424_all.htm
http://www.ibm.com/developerworks/cn/java/j-lo-visualvm/

参考资料:
http://docs.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html
http://blog.csdn.net/zyxnetxz/article/details/4771031

  • 大小: 42.3 KB
  • 大小: 201.9 KB
  • 大小: 119.9 KB
  • 大小: 38.3 KB
  • 大小: 158.6 KB
  • 大小: 172.7 KB
  • 大小: 135.2 KB
  • 大小: 208.2 KB
  • 大小: 180.4 KB
0
0
分享到:
评论

相关推荐

    使用jconsole监听远程Tomcat服务的方法

    主要介绍了使用jconsole监听远程Tomcat服务,需要的朋友可以参考下

    asf.zip_java jmx jconsole_remote

    JDK1.5提供JMX remote的管理工具Jconsole,可以监控Java运行程序的内存使用情况、活动线程数量、类装载的数量、MBeans的状态、虚拟机的各种信息等,还可以执行MBean公开的方法或强制进行垃圾回收。只要应用服务器...

    java7源码-test1:测试1

    5、死锁例子,使用jconsole来观察. 6、BTrack的使用例子,不过,没有效果。 7、被动引用的例子. 8、不同类加载器的例子。 9、try-with-resource语句的例子--TryWithResource类. 10、利用反射获取构造方法的例子--...

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第59讲 VisualVM使用详解 00:08:03  第60讲 性能调优概述 00:11:22  第61讲 性能调优-案例1 00:23:28  第62讲 性能调优-案例2 00:10:05  第63讲 性能调优-案例3 00:12:41  第64讲 前半部分内容整体回顾...

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第1节说在前面的话 [免费观看] 00:05:07分钟 | 第2节整个部分要讲的内容说明 [免费观看] 00:06:58分钟 | 第3节环境搭建以及jdk,jre,jvm的关系 [免费观看] 00:20:48分钟 | 第4节jvm初体验-内存溢出问题的分析与...

    Jetty中文手册

    用JConsole监控Jetty 如何使用Jetty开发 Jetty HelloWorld教程 Jetty和Maven HelloWorld教程 Jetty(6)入门 (www.itjungle.com) Jetty Start.jar 配置Jetty 如何设置上下文(Context Path) 如何知道使用了那些jar包...

    JVM监控工具介绍

    JVM监控工具介绍:详细介绍jstack, jconsole, jinfo, jmap, jdb, jstat 等命令的使用方法

    jprofiler6,带SN

    或者CPU热点,即:哪儿方法占用的较大得CPU资源。我使用的是4.3.2版本,以前试用过3**版本,不过那个bug比较多,容易死,4**版本稳定多了。 有了上面那些信息对于系统的调优会有很大帮助。这里提供有几篇文章供...

    netty-starter:Netty权威指南学习之旅

    启动后会发现主线程阻塞在ServerSocket的accept()方法上:可通过JConsole查看线程堆栈日志可以发现。(JConsole是一个图形监视工具,用于监视本地或远程计算机上的Java虚拟机(JVM)和Java应用程序。)客户端...

    javasnmp源码-02-jmx-demo:如何使用JMX来管理程序

    举个例子,我们可以通过jconsole监控应用程序的堆内存使用量、线程数、类数,查看某些配置信息,甚至可以动态地修改配置。另外,有时还可以利用JMX来进行测试。 本文将介绍以下内容: 什么是JMX; JMX的基础架构; ...

    Java虚拟机

    常见虚拟机监控与故障处理工具的原理和使用方法。第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、...

    jvm信息jmap使用的基本方法教程

    JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,下面这篇文章主要给大家介绍了关于jvm信息jmap使用的基本方法教程,需要的朋友...

    JConsoleUtils:带有方便方法的类,用于使用ANSI标准的控制台

    JConsole实用程序带有方便方法的类,用于使用ANSI标准的控制台

    记一次tomcat进程cpu占用过高的问题排查记录

    主要介绍了记一次tomcat进程cpu占用过高的问题排查记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    汪文君高并发编程实战视频资源全集

     高并发编程第三阶段14讲 Unsafe中的方法使用,一半是天使,一半是魔鬼的Unsafe.mp4  高并发编程第三阶段15讲 Unsafe背后的汇编指令,牛逼男人背后的女人_.mp4  高并发编程第三阶段16讲 CountDownLatch经典案例...

    汪文君高并发编程实战视频资源下载.txt

     高并发编程第三阶段14讲 Unsafe中的方法使用,一半是天使,一半是魔鬼的Unsafe.mp4  高并发编程第三阶段15讲 Unsafe背后的汇编指令,牛逼男人背后的女人_.mp4  高并发编程第三阶段16讲 CountDownLatch经典案例...

    jetty-jmx:公开 JMX 的码头环服务器示例

    码头-jmx 公开 JMX 的码头环服务器示例用法 lein run...jconsole localhost:8001执照版权所有 :copyright: 2015 Jarrell Wagoner 根据 Eclipse 公共许可证分发 1.0 版或(由您选择)任何更高版本。

    drupal-soap-adapter:一种 SOAP 服务(和 WSDL),适用于需要静态类型声明的旧系统的 Drupal REST API。 出于某种原因用Java编写

    Drupal SOAP 适配器 此 Java Web 应用程序提供静态类型的 SOAP WSDL 和端点,用于使用的内置 REST 功能访问系统。 包括对以下资源类型的支持: /产品 /命令 /用户 部署后,该服务有效地提供了一... 使用 jconsole、命

Global site tag (gtag.js) - Google Analytics