从Java 5开始 引入了 JConsole。JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。

二、如何启动JConsole

  1. 如果是从命令行启动,使 JDK 在 PATH 上,运行 jconsole 即可。
  2. 如果从 GUI shell 启动,找到 JDK 安装路径,打开 bin 文件夹,双击 jconsole

当分析工具弹出时(取决于正在运行的 Java 版本以及正在运行的 Java 程序数量),可能会出现一个对话框,要求输入一个进程的 URL 来连接,也可能列出许多不同的本地 Java 进程(有时包含 JConsole 进程本身)来连接。如图所示:

想分析那个程序就双击那个进程。

三、如何设置JAVA程序运行时可以被JConsolse连接分析

  1. 本地程序(相对于开启JConsole的计算机),无需设置任何参数就可以被本地开启的JConsole连接(Java SE 6开始无需设置,之前还是需要设置运行时参数 -Dcom.sun.management.jmxremote )
  2. 无认证连接 (下面的设置表示:连接的端口为8999、无需认证就可以被连接)
    1. -Dcom.sun.management.jmxremote.port=8999 \
    2. -Dcom.sun.management.jmxremote.authenticate=false \
    3. -Dcom.sun.management.jmxremote.ssl=false
  3. 如果考虑到安全因素,需要认证,需要安全连接,也是可以搞定的。参考:http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdenv

四、JConsole如何连接远程机器的JAVA程序(举例说明)

1、写一个简单的一直运行的JAVA程序,运行在某台机器上如(192.168.0.181)

  1. java -cp . -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.managent.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false JConsoleTest

2、另外一台机器进行连接

可以直接使用命令:

  1. jconsole.exe 192.168.0.181:8999

也可以在已经打开的JConsole界面操作 连接->新建连接->选择远程进程->输入远程主机IP和端口号->点击“连接”,如图:


 然后就会进入分析界面:

性能分析

下面说说如何分析,如何使用这六个标签

  • 概述:
    Displays overview information about the Java VM and monitored values.
  • 内存:
    显示内存使用信息
  • 线程:
    显示线程使用信息
  • 类:
    显示类装载信息
  • *VM摘要:*显示java VM信息
  • MBeans:
    显示 MBeans.

概述

概述很简单没啥说的,自己看看吧,不过值得一提的是对着图点击右键可以保存数据到CSV文件,以后可以使用其他工具来分析这些数据。

内存

这个比较有价值,参看堆内存,非堆内存,内存池的状况总体内存的分配和使用情况以及不同的GC进行垃圾回收的次数和时间。可以手动进行GC查看内存变化。

在分析JAVA内存问题进行调优时候非常有用,你要学习JVM内存模型,之后会发现这里的每个值都具有意义。

GC的算法和参数对性能有显著的影响,注意垃圾回收次数、时间、以及partial GC和full GC,调整你所使用的不同GC和以及各个GC下的参数,然后在这个视图下观察,以得到好的性能。

这里贴一下 Java HotSpot
VM garbage collector 下generational GC 的各代的划分图:

关于GC,可以参考:http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

线程

左下角显示所有的活动线程(如果线程过多,可以在下面的过滤栏中输入字符串过滤出你想要观察的线程)。点击某个显示会显示这个线程的名称、状态、阻塞和等待的次数、堆栈的信息。

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

另外下面有个按钮“检测到死锁”,有时候会有用处。

没啥要说的。

VM摘要

也没啥要说的,看看吧,内存状况,操作系统...

MBean

这里可以有一些额外的操作。

插件

  1. jconsole -pluginpath C:\Java\jdk1.6.0_22\demo\management\JTop\JTop.jar

一看便知,是个什么东西。

推荐使用升级版 JConsole 即 jvisualvm 。

JConsole是什么的更多相关文章

  1. JConsole远程连接配置

    JConsole远程连接还是有一点坑的.这里记录一下配置过程,好记性不如烂笔头. 1.在远程机的tomcat的catalina.sh中加入配置: JAVA_OPTS="$JAVA_OPTS ...

  2. 通过jconsole监控tomcat JVM 内存、线程、CPU

    从Java 5开始 引入了 JConsole,来监控 Java 应用程序性能和跟踪 Java 中的代码.jconsole是JDK自带监控工具,只需要找到 JDK 安装路径,打开 bin 文件夹,双击  ...

  3. 使用本地JConsole监控远程JVM(最权威的总结)

    问题背景   Tomcat经常崩溃crash,想看看JVM内存使用情况,就想到了用Jconsole监控,以前只是监控本地的JVM,这次要监控远程的,遇到了不少问题.   经过几个小时的努力,参考了众多 ...

  4. 如何利用 JConsole观察分析Java程序的运行,进行排错调优

    原文链接:http://jiajun.iteye.com/blog/810150 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...

  5. maven 问题解决 tools以及jconsole两个jar包 无效

    在SVN上下载项目,结果完成后出现两个jar包不存在的情况 如下图: 然后,第一步就是去查看POM.xml文件是否配置了这两个文件,结果并没有,于是就更加奇怪了 所以怀疑是不是其他maven下载的ja ...

  6. JConsole监控远程Tomcat服务器

    为了解决内存溢出的问题,会用到一些监视内存的工具,jconsole这个工具在jdk1.7自带了.这个工具可以查看系统的堆,非堆,线程,等等的一些整体的情况,从而可以判断出系统的一个大概的性能情况. c ...

  7. 【经验记录】Jconsole Jvisualvm 监控Tomcat

    环境:centos 6 1.首先检查hostname是否正确,输入以下命令 hostname -i 如果输出机器ip,则表示正确,如果输出 hostname: Unknown host 查看/etc/ ...

  8. Jconsole远程监控tomcat 的JVM内存(linux、windows)

    Jconsole是JDK自带的监控工具,在JDK/bin目录下可以找到.它用于连接正在运行的本地或者远程的JVM,对运行在java应用程序的资源消耗和性能进行监控,并画出大量的图表,提供强大的可视化界 ...

  9. JVM内存监控工具 Jconsole

    -------------Jconsole监视远程的linux服务器上的tomcat ----------------------------- 1.linux服务器上的tomcat 的bin/cat ...

  10. 利用jdk自带的运行监控工具JConsole观察分析Java程序的运行

    利用jdk自带的运行监控工具JConsole观察分析Java程序的运行 原文链接 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能 ...

随机推荐

  1. c#接口和new关键字和属性访问器基础收获

    1.interface 对于接口,一把我在项目中会这样使用: interface IStudent { string Name(); string GoSchool(); } 但是呢,这样有个不好的地 ...

  2. 利用汇编查看C++函数调用

    这篇文章的内容是一个老生常谈的问题----> 函数是如何被调用的. 本文用汇编代码研究函数调用的过程,参数调用的方式,函数值的返回. 1. 函数是如何实现调用的 函数的调用是用call 和 re ...

  3. 生成php所需要的APNS Service pem证书的步骤

    1.登录到 iPhone Developer Connection Portal 并点击 App IDs 2.创建一个不使用通配符的 App ID .通配符 ID 不能用于推送通知服务.例如,我们的i ...

  4. this指针与function变量--this究竟指向哪里?

    参考文章:<深入浅出 JavaScript 中的 this> http://www.ibm.com/developerworks/cn/web/1207_wangqf_jsthis/ Ja ...

  5. numpy 札记

    transpose 在处理caffe读入的图片数据时,需要将原始图片的数据 H*W*3(height*width*RGB) 转换为 3*H*W(RGB*heigth*width) 需要用到numpy的 ...

  6. gulp+webpack+vue

    gulp+webpack+vue 章节目录 1.目标 2.实现 2.1合并库文件 2.2组织业务代码 2.3打包开发代码 2.4使用webpack-dev-server和热替换插件HotModuleR ...

  7. Ajax与C#应用详细实例

    实现刷新的方法主要是Ajax,本文档实现Ajax有两个方法(Jquery 和 W3C的JS方法):其次,使用JS也可以实现刷新数据不刷新页面(详见其他刷新页面方法JS实现):对于CallbackRef ...

  8. Android学习笔记:利用httpclient和AsyncTask 发起网络http post操作

    1.在android4中,发起网络http操作,不能在Activity的事件(即主线程)中进行,必须在单独的线程中操作. 另外进行网络操作,需要在manifest文件中增加如下的权限: <use ...

  9. Siverlight+WCF+Nhibernate 开发之旅(一)

    最近正在开发sl程序,考虑了很久,参考了一些框架,令人头疼的数据访问层最终选择wcf+nhibernate,至于为什么选择wcf和nh,个人参考了其他的框架感觉这两者结合从开发效率和便捷性方面比其他的 ...

  10. Ubuntu下获取Nexus7的Root权限

    一.准备 下载获取Root权限的工具包. 下载地址: http://downloadandroidrom.com/file/Nexus7/rooting/Nexus7Root.zip 二.解锁 Ubu ...