使用JConsole监控

1.介绍

JConsole图形用户界面是符合Java管理扩展(JMX)规范的监视工具,可以监测有关在Java平台上运行的应用程序的性能和资源消耗的信息。

启动JConsole

jconsole [ options ] [ connection ... ]

connection = pid | host:port | jmxURL

-interval=n:设置更新间隔(默认4秒)
-notile :不平铺 (for two or more connections).

-pluginpath plugins:指定目录,及jar路径。

jar中必须包含 META-INF/services/com.sun.tools.jconsole.JConsolePlugin

关于jmxURL,可以参考javax.management.remote.JMXServiceURL说明。

2.本地监控

% jconsole
#进程
% jconsole processID

3.远程监控

%jconsole hostName:portNum

3.1远程监控配置

设置此属性注册了Java VM平台的MBean并通过专用接口发布了远程方法调用(RMI)连接器,以允许JMX客户端应用程序监视本地Java平台,即与JMX客户机在同一台机器上运行的Java VM 。

3.1开启JMX端口

com.sun.management.jmxremote
#JDK6以前版本,需要为Java SE示例应用程序记事本启用JMX代理
%cd JDK_HOME /demo/jfc/ Notepad
%java -Dcom.sun.management.jmxremote -jar Notepad.jar
#JDK以后版本可以启用开箱即用的管理代理监视和管理
%java -jar Notepad.jar
#portNum是要启用JMX RMI连接的端口号
#设置此属性将使用众所周知的名称“jmxrmi”在指定端口的私有只读注册表中发布一个附加的RMI连接
com.sun.management.jmxremote.port = portNum

对于生产系统,使用SSL客户端证书来验证用户管理的客户端主机和密码认证。

有关详细信息,请参阅使用SSL和 使用LDAP身份验证的主题。

3.2使用密码认证

#开启或禁用
com.sun.management.jmxremote.authenticate=false

3.2.1 LDAP(不熟悉,不讨论)

com.sun.management.jmxremote.login.config

3.2.2 密码认证

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 
\-Dcom.sun.management.jmxremote.ssl=false 
\-Dcom.sun.management.jmxremote.authenticate=true 
\-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password 
\-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access

其中com.sun.management.jmxremote.password.file可以从 JRE_HOME/lib/jmxremote.password.template模板获得;

com.sun.management.jmxremote.access.file可以同JRE_HOME/lib/jmxremote.access模板获得

4.功能

4.1选项卡

概述(Overview):显示有关Java VM和监视值的概述信息。
内存(Memory):显示有关内存使用的信息。
线程(Threads):显示有关线程使用的信息。
类(Classes):显示有关加载类的信息。
VM(VM Summary):显示有关Java VM的信息。

MBeans(MBeans):显示有关MBean的信息。

4.1.1概述信息

“概述”选项卡显示有关CPU使用情况,内存使用情况,线程计数以及Java VM中加载的类的图形监视信息,均在单个屏幕中。

JConsole允许您将图表中显示的数据保存在逗号分隔值(CSV)文件中。要从图表保存数据,只需右键单击任何图表,

4.1.2 内存选项卡

“内存”选项卡提供有关内存消耗和内存池的信息。

  • Eden Space (heap): 最初为大多数对象分配内存的池
  • Survivor Space (heap): 包含在Eden空间的垃圾回收中幸存下来的对象的池
  • Tenured Generation (heap):包含在幸存者空间中存在一段时间的对象的池
  • Permanent Generation (non-heap):包含虚拟机本身的所有反射数据的池,如类和方法对象。对于使用类数据共享的Java VM,这一代分为只读和读写区
  • Code Cache (non-heap): HotSpot Java VM还包括代码缓存,其中包含用于编译和存储本机代码的内存。

“ 详细信息”区域显示几个当前内存指标:
已使用(Used):当前使用的内存量,包括所有对象占用的内存,可访问和不可访问。

承诺(Committed):保证可供Java VM使用的内存量。承诺的内存量可能会随时间而变化。Java虚拟机可能会将内存释放到系统,并且已提交内存的数量可能小于启动时初始分配的内存量。提交的内存量将始终大于或等于已使用的内存量。

最大值(Max):可用于内存管理的最大内存量。其价值可能会改变或未定义。即使所使用的数量小于或等于最大值(例如,当虚拟内存系统较低时),如果Java VM尝试增加使用的内存大于已提交的内存,则内存分配可能会失败。

GC时间:在垃圾收集上花费的累积时间和总调用次数。它可能有多行,每行都表示Java VM中使用的一个垃圾收集器算法。

右下方的条形图显示堆和非堆内存中的内存池所消耗的内存。当使用的内存超过内存使用阈值时,该条将变为红色。您可以通过MemoryMXBean的属性设置内存使用阈值。

Heap and Non-Heap

非堆内存包括所有线程之间共享的方法区域和Java VM的内部处理或优化所需的内存。它存储每个类的结构,例如运行时常量池,字段和方法数据,以及方法和构造函数的代码.

堆内存是运行时数据区域,Java VM为此分配所有类实例和数组的内存.

内存池和内存管理器
内存池和内存管理器是Java VM内存系统的关键方面。
1.一个内存池表示Java虚拟机管理的存储区。Java VM具有至少一个内存池,并且可能在执行期间创建或删除内存池。内存池可以属于堆或非堆内存。
2.一个内存管理器管理一个或多个存储池。垃圾回收器是一种负责回收由不可达对象使用的内存的内存管理器。Java VM可能有一个或多个内存管理器。它可能会在执行期间添加或删除内存管理器。内存池可以由多个内存管理器管理。

垃圾收集

有关更多信息,请参阅使用5.0 HotSpot VM调整垃圾收集

4.1.3监控线程使用
“线程”选项卡提供有关线程使用的信息。

左下角的线程列表列出了所有活动线程。如果在“过滤器”字段中输入字符串,“线程”列表将只显示名称包含您输入的字符串的线程。单击“线程”列表中的线程名称,以显示有关该线程的信息,包括线程名称,状态和堆栈跟踪。
图表显示随着时间的推移活动线程数。显示两行。
红色:峰值线程数
蓝色:活动线程数。

线程MXBean提供了几个其他有用的操作,这些操作未被“线程”选项卡覆盖。
findMonitorDeadlockedThreads:检测对象监视器锁上是否有任何线程死锁。此操作返回一系列死锁的线程ID。
getThreadInfo:返回线程信息。这包括名称,堆栈跟踪和线程当前被阻止的监视器锁(如果有)以及哪个线程持有该锁以及线程争用统计信息。
getThreadCpuTime:返回给定线程消耗的CPU时间。

2.检测死锁线程

检测死锁按钮将检测涉及对象监视器和java.util.concurrent可自动同步器的死锁周期(请参阅java.lang.management.LockInfo的API规范 文档)。在Java SE 6中添加了对java.util.concurrent锁的监视支持 。如果JConsole连接到Java SE 5.0 VM,则检测死锁机制将只会发现与对象监视器相关的死锁。JConsole不会显示与所有同步器相关的任何死锁。

4.1.4 监控类加载

“类”选项卡显示有关类加载的信息。

红线是加载的类的总数(包括随后卸载的类)。
蓝线是当前加载的类的数量。

选项卡底部的“详细信息”部分显示自Java VM启动以来加载的类的总数,当前加载的数量和卸载的数量。您可以通过选中右上角的复选框将类加载跟踪设置为详细输出。
4.1.5 查看VM信息
“VM摘要”选项卡提供有关Java VM的信息。

  • Summary

    • Uptime: Java VM启动以来的总时间
    • Process CPU Time: Java VM自启动以来消耗的CPU总时间。
    • Total Compile Time:在JIT 编译中花费的总累计时间
  • Threads
    • Live threads: 当前的守护进程线程数和非守护进程线程数。
    • Peak: 自Java VM启动以来最多的实时线程数。
    • Daemon threads: 当前的守护进程线程数。
    • Total threads started: Java VM启动后启动的线程总数,包括守护程序,非守护程序和已终止的线程。
  • Classes
    • Current classes loaded: 当前加载到内存中的类数。
    • Total classes loaded:自Java VM启动以来加载到内存中的总数,包括随后卸载的类的总数。
    • Total classes unloaded:从Java VM启动以来从内存中卸载的类数。
  • Memory
    • Current heap size: 堆当前占用的千字节数。
    • Committed memory: 分配给堆使用的内存总量。
    • Maximum heap size:占用的最大千字节数。
    • Objects pending for finalization:等待完成的对象数量。
    • Garbage collector: 有关垃圾收集的信息,包括垃圾回收器名称,执行的集合数以及执行GC的总时间。
  • Operating System
    • Total physical memory:操作系统具有的随机存取存储器(RAM)的数量。
    • Free physical memory: 操作系统可用的可用内存量。
    • Committed virtual memory: 保证运行进程可用的虚拟内存量。
  • Other Information
    • VM arguments: 应用程序传递给Java VM的输入参数,不包括main方法的参数。
    • Class path: 系统类加载器用于搜索类文件的类路径。
    • Library path: 加载库时要搜索的路径列表。
    • Boot class path:引导类路径由引导类加载器用于搜索类文件。

参考资料

http://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html

http://docs.oracle.com/javase/8/docs/technotes/tools/unix/jconsole.html

http://docs.oracle.com/javase/8/docs/technotes/guides/management/jconsole.html

时间: 2024-11-03 03:42:06

使用JConsole监控的相关文章

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

问题背景 Tomcat经常崩溃crash,想看看JVM内存使用情况,就想到了用Jconsole监控,以前只是监控本地的JVM,这次要监控远程的,遇到了不少问题. 经过几个小时的努力,参考了众多网友的资料之后,才最终解决了这个问题. 比较坑爹的是,网上的资料,竟然没有一个是:完美无缺的,没有一篇文章提到了"jmxremote.access"这个文件的重要性. 第一阶段 找到了2种配置,是否需要输入密码. JAVA_OPTS="$JAVA_OPTS -Dcom.sun.manag

Jconsole 监控tomcat

通过jconsole监控可以获取监控tomcat的相关的数据信息 如何通过代码来获取其中的线程和内存状况呢? 首先要配置好jconsole监控的相关配置,一搜基本就是那一个, 配置配不好的话接下来的工作就做不好了,所有要先配置好,然后可以上代码了: 1 package one; 2 3 import java.io.IOException; 4 import java.lang.management.MemoryMXBean; 5 import java.lang.management.Memo

jconsole监控tomcat

一.专业术语 GC垃圾回收机制:当需要分配的内存空间不再使用的时候,JVM将调用垃圾回收机制来回收内存空间. JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架.JMX可以跨越一系列异构操作系统平台.系统体系结构和网络传输协议,灵活的开发无缝集成的系统.网络和服务管理应用. JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际

jconsole监控远程weblogic和tomcat

jconsole可以对远程主机上的java进程的内存使用情况进行监控.本文将讲解如何使用jconsole监控远程主机上的weblogic和tomcat. 一.环境 1.本机环境:windows xp+jconsole(jdk1.6) 2.远程环境1:sunos(solaris.jdk1.6)+weblogic 3.远程环境2:redhat(jdk1.6)+tomcat 本文将介绍两种环境下的配置,两者配置基本上一样,其他的系统应该也差不多. 二.远程连接sunos(solaris)+weblog

jconsole监控内容和CPU情况

jconsole监控内容和CPU情况 本地:开始--运行--cmd--jconsole,弹出选择框: 查看本地内存和CPU使用情况: 选择本地进程,选择并点击一下sun.tools.jconsole.JConsole这一行,然后点击连接,就可以查看我们的内存和CPU的使用情况了. 服务器内存和CPU信息: 远程进程,在文本框中输入我们需要测试的服务器的IP地址:端口,然后在下面输入用户名和密码,点击连接,就能测服务器内容等情况

如何使用JCONSOLE 监控eclipse的tomcat

在默认情况下,使用jconsole 监控本地tomcat 是不需要任何配置的,直接连接就可以监控tomcat.   但是在eclipse 下启动是监控不了.   解决方法:   设置jvm参数:     -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false   重新打开jconsole就可

jconsole监控远程linux tomcat运行情况的配置 (转)

来自:http://zhumeng8337797.blog.163.com/blog/static/100768914201242494649455/ 步骤如下: 1.编辑tomcat/bin/catalina.sh Bash代码 vi catalina.sh 在其中“ # ----- Execute The Requested Command -----------------------------------------” 之前插入新的一行(中间没有换行),内容如下: Vi catalin

使用本地JConsole监控远程JVM (转)

问题背景 Tomcat经常崩溃crash,想看看JVM内存使用情况,就想到了用Jconsole监控,以前只是监控本地的JVM,这次要监控远程的,遇到了不少问题. 经过几个小时的努力,参考了众多网友的资料之后,才最终解决了这个问题. 比较坑爹的是,网上的资料,竟然没有一个是:完美无缺的,没有一篇文章提到了“jmxremote.access”这个文件的重要性. 第一阶段 找到了2种配置,是否需要输入密码. JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxr

本地win下JConsole监控远程linux下的JVM

环境:服务器端: Linux + jdk1.7.0_75 + tomcat 7本地: Win + jdk1.7.0_55 一.修改/etc/hosts文件 hostname -i 如果显示127.0.0.1时,修改/etc/hosts 将127.0.0.1替换成linux服务器的真实ip 二.修改 catalina.sh文件 vim  /usr/local/tomcat7**/bin/catalina.sh   #进入tomcat的bin目录下 在# OS specific support. 

JConsole监控Java程序的运行情况

JConsole 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行.您可以轻松地使用 JConsole(或者,它更高端的 "近亲" VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码. 注:现在jdk已经发展到jdk8版本,在这我安装的是jdk8,所以以jdk8给大家分享jconsole的一些简单用法 二 .jconsole的启动问题 我现