1、概述
JConsole是一个基于JMX的GUI工具,用于连接正在运行的JVM,不过此JVM需要使用可管理的模式启动。如果要把一个应用以可管理的形式启动,可以在启动是设置com.sun.management.jmxremote
。JConsole能够提供被监控虚拟机的内存、线程、类的加载以及MBean等信息,从而能够对服务器的运行情况进行实时监控。
其实在 JDK 5 中已经新加入了这个功能了. 现在的 JDK 已经内置了对 VM 的监控功能. JDK 6 中这个工具变的更加好用了. 关于 JDK 5 中如何使用这个工具可以参考这里: http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
2、环境配置
1、环境
服务器:CentOS 5 + JDK6 + Tomcat6
ip地址:192.168.1.101
客户机:Windows + JDK 6
2、 配置
l 修改java虚拟机启动参数
在%TOMCAT_HOME%\bin\catalina.sh文件中将
JAVA_OPTS=”-Xms256m -Xmx512m -XX:MaxPermSize=128m”
修改为:
JAVA_OPTS=”-Xms256m -Xmx512m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false”
注意:1090表示监控的端口号,确保指定的端口不被占用;可以采用netstat -an来查看已经占用的端口;配合lsof -i:portnum 来查看占用端口的具体应用程序;另外如果开启了防火墙服务,请确保端口能够透过防火墙访问;
l 启动Tomcat服务器
./catalina.sh run&
l 连接远程虚拟机
启动%JAVA_HOME%\bin目录下的jconsole,弹出对话框
在“远程进程”中输入192.168.1.101:1090,点击“连接”,就能查看到远程Tomcat服务器的运行情况了。
当JConsole成功建立连接,它从连接上的JMX代理处获取信息,并且以下面几个标签页呈现信息。
- 概述:监控JVM和一些监控变量的信息。
- 内在:内存使用信息
- 线程:线程使用信息
- 类:类调用信息
- VM 概要: JVM的信息
- MBean:所有MBeans的信息
MBean 标签页展示了所有以一般形式注册到JVM上的MBeans。MBeans tab允许你获取所有的平台信息,包括那些不能从其他标签页获取到的信息。注意,其他标签页上的一些信息也在MBeans这里显示。另外,你可以使用 MBeans标签管理你自己的应用的MBeans
3、使用MBean标签监控和管理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,此操作可以发送进行实时的垃圾回收请求
图3: MBean 标签
左边的树形结构以名字的方式展示了所有MBeans的列表。一个MBean对象的名字由一个域的名字和一串关键字属性组成。例如,JVM的平台的MBeans是在“java.lang”域下的一组,而日志的MBeans则在"java.util.logging
"域下。MBean对象的名字在javax.management.ObjectName规范中定义。
当你在树中选中一个MBean,属性,操作,或者通知等一些信息会再右边显示出来。如果属性是可写的(属性被标志为蓝色),你可以进行设置。
图4: MBean 操作
你可以操作在”操作”节点中列出的操作。
图5: MBean 通知
你也可以看到由MBean发送出来的通知:默认情况,如果你不订阅通知的话,JConsole不会收到MBean发生过来的通知。你可以点击"
订阅"按钮来堆通知进行定义,而使用"末订阅
"按钮来取消订阅
4、监控内存
内存标签页通过读取内存系统、内存池、垃圾回收的MBean来获取对内存消耗、内存池、垃圾回收的情况的统计。
图 6:
上图展示了内存随时间变化的使用情况。有对堆的、非堆的以及特殊内存池的统计。内存池信息是否能被获取,取决与使用的Java虚拟机。下面列表展示了HotSpot虚拟机的内存池情况。
内存池“Eden Space ”(heap): 内存最初从这个线程池分配给大部分对象。
内存池“Survivor Space” (heap):用于保存在eden space内存池中经过垃圾回收后没有被回收的对象。
内存池“Tenured Generation” (heap):用于保持已经在 survivor space内存池中存在了一段时间的对象。
内存池“Perm Generation” (non-heap):保存虚拟机自己的静态(refective)数据,例如类(class)和方法(method)对象。Java虚拟机共享这些类数据。这个区域被分割为只读的和只写的
内存池“Code Cache”(non-heap):HotSpot Java虚拟机包括一个用于编译和保存本地代码(native code)的内存,叫做“代码缓存区”(code cache)
详细信息区域给出一些当前线程的信息:
已使用:当前的内存使用量。使用的内存包括所有对象(能被获取和不能被获取的)所占用的内存。
分配:Java虚拟机保证能够获取到的内存量。分配内存(committed memory)的量可能随时间改变。Java虚拟机可能释放部分这里的内存给系统,相应的分配的内存这时可能少于初始化时分配的给它的量。分配量总数大于或等于已使用的内存量。
最大值:内存管理系统可以使用的最大内存量。这个值可以被改变或者不做设定。如果JVM试图增加使用的内存到大于分配量(committed memory)的情况,内存分配可能失败,即便想使用的内存量小于或者等于最大值(如:系统虚拟内存比较低时)
GC 时间 :垃圾回收使用的总时间和调用垃圾回收的次数。它可能有好几行,每行代表JVM使用的垃圾回收算法。
Usage Threshold The usage threshold of a memory pool. This field will only beshown if the memory pool supports usage threshold.
右下角的棒状图表显示了被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。如下图所示
图7 设置 Usage Threshold
当 TenuredGen
memory pool的内存使用超过6MBytes时,代表 TenuredGen
memory pool的柱状图将会呈现红色来代表使用的内存超过了usage threshold。代表堆内存的柱状图也将变为红色。你可以选择柱状图或者在图表中指定内存池来查看某个指定内存池的信息。如果把鼠标房子柱状图上,将会显示出内存池的名字
图8 Low Memory
5、开启/关闭虚拟机的详细跟踪
如上所述,内存系统的MBean定义了一个叫做Verbose布尔变量,让你能动态的打开或关闭详细的GC跟踪。详细的GC跟踪,将会在JVM启动时显示。默认的HotSpot的GC详细输出为stdout
.
图 9: 设置 Verbose GC
6、死锁检查
线程标签页提供关于应用的线程运行信息
图 10: Thread 标签
左下角列出了所以正在运行的线程。如果你在过滤器中输入一个字符,线程列表将仅显示线程名字包含你输入字符的线程。通过点击某个线程,你可以获取这个线程的相关信息。
线程的MBean标签提供了一些Thread标签没有提供有用的操作。
- findMonitorDeadlockedThreads. 如果发生线程死锁,可以通过这个检查出来。操作返回一组死锁的线程ID
- getThreadInfo. 返回线程的信息。包括线程的名称、堆栈信息,导致当前线程阻塞的锁,如果有的话,还返回哪儿线程持有这个锁,和这个线程信息的统计。
- getThreadCpuTime.返回指定线程消耗的CPU时间。
为使用上面这些属性,可以到MBeans标签下,在MBeans树上选择Threading MBean。它列出了当前监控的JVM所有属性的操作。
图 11: MBean 标签 Threading
为检查你的应用是否进入死锁(例如,你的应用挂起),你可以使用findMonitorDeadlockedThreads
操作。
图 12: Find Deadlocked Threads.
一旦你选择了findMonitorDeadlockedThreads按钮,将会有一个弹出窗口显示结果。在上面例子中,JConsole连接了一个存在3个死锁线程的示例应用。如上所示,检查出ID为12,10和11的线程死锁。想查询更多的线程信息,可以使用getThreadInfo操作。线程的MBean支持getThreadInfo操作的四种形式,
- 对一个给定的线程ID,给出最深的堆栈情况
- 堆一系列的线程ID,给出最深的堆栈情况
- Of a given thread ID with no stack trace.
- Of an array of thread IDs with no stack trace.
对应死锁情况,你一般会比较关系堆栈情况。你可以在getThreadInfo操作的第一个参数中输入死锁的线程ID和你想跟踪的堆栈深度。
图 13: ThreadInfo for Thread ID = 12.
双击stackTrace属性的值域将会显示一个复合对话框,你可以在堆栈中来回查看。图14,15显示了死锁线程-1的复合对话框中的第一层堆栈和第二层堆栈。
图 14: Top Frame of the Stack Trace of DeadlockedThread-1.
图 15: Second Frame of the Stack Trace of DeadlockedThread-1.
线程标签页提供了一个友好的界面供查看线程的堆栈。你可以找到死锁线程的名字,使用getThreadInfo
查找线程信息。然后又可以使用线程标签页来分析死锁。
7、控制日志等级
Logging MBean定义了LoggerNames
属性,用于描述日志名称。为找到你的应用的日志,可以选择在MBeans树中java.util.logging
下的Logging MBean,双击LoggerNames属性
图 16: List of All Logger Names
Logging MBean也支持三种操作:
- getParentLoggerName. 返回指定logger的父logger
- getLoggerLevel. 返回指定logger的日志等级
- setLoggerLevel.设置指定logger到一个新的等级
所有三个操作都把日志名称作为第一个参数。
相关推荐
【Tomcat监控工具Probe3.0详解】 在Java Web服务器领域,Apache Tomcat是一个广泛应用的开源软件,用于部署和运行Servlet和JSP应用。然而,随着应用规模的扩大,管理和监控Tomcat的运行状态变得至关重要。 Probe3.0...
总结来说,Probe是一款强大的Tomcat监控解决方案,它提供了对数据库连接池、JVM内存、CPU以及其他系统性能的全面监控,帮助管理员优化Tomcat服务器的性能,预防和解决问题。"probe.war"文件是实现这个功能的核心组件...
【标题】"Tomcat监控脚本(支持Windows、Linux)"涉及到的是如何确保Tomcat服务器的稳定运行,通过自动化脚本来实现对服务器状态的实时监控,防止宕机情况的发生。这通常包括性能指标的采集、异常检测和自动处理机制。...
### Tomcat监控脚本知识点详解 #### 一、概述 在现代软件开发中,服务器的稳定性和可用性至关重要。为了确保应用服务器(如Tomcat)能够持续提供服务,常常需要实施自动化监控机制来实时监测其运行状态,并在发生...
Java Tomcat监控程序是用于确保Web应用程序持续稳定运行的重要工具。在Java开发环境中,Tomcat是一个广泛使用的开源应用服务器,特别适用于运行Java Servlets和JavaServer Pages(JSP)。为了提高系统的可靠性和稳定...
"tomcat监控"意味着它具备实时监控Tomcat服务器各项指标的能力,例如CPU使用率、内存占用、请求处理时间、错误日志等。这些数据对于诊断性能问题和预测潜在故障至关重要。而"tomcat重启"功能,则是在监测到特定问题...
在Windows环境下,Tomcat监控器是一个非常重要的工具,它能够帮助管理员实时监控和管理Apache Tomcat服务器的状态,确保服务的稳定运行。这篇文章将详细介绍如何在Windows下使用Tomcat监控器,以及它的一些核心功能...
【标题】:“Tomcat监控及自动重启” 在Java Web开发中,Tomcat是一个广泛应用的开源应用服务器,负责运行Servlet和JSP应用。监控Tomcat的状态和自动重启是系统管理员日常维护工作的重要部分,确保服务的稳定性和高...
TomcatMoni(TOMCAT监控助手)此程序用于运行在服务器中,预留在内存中,监控网站是否可以正常打开。 原理即间隔性的访问指定的服务器中运行的网站,如果能够打开就正常,打不开就执行重启命令 使用前,请修改conf....
【标题】:Tomcat监控工具 【描述】:Tomcat监控工具是用于管理和监测Apache Tomcat服务器性能的重要工具。它们可以帮助管理员了解应用服务器的运行状况,包括JVM内存使用、线程状态、HTTP请求响应时间等关键指标,...
【标题】"Tomcat监控工具-Probe"是一个专为监控Apache Tomcat服务器性能而设计的应用。Probe是一款轻量级的Web应用程序,它能够提供实时的、详细的Tomcat服务器运行状态信息,帮助管理员诊断和优化应用性能。通过...
tomcat监控java小类,可自行转换为java类进行继续测试测试.....
本话题聚焦于在Windows平台上对Tomcat的运行状况进行自动监控,并在出现异常时进行自动重启,以保障服务的连续性。下面将详细讨论这个主题。 首先,我们要理解Tomcat是什么。Tomcat是一款开源的Java Servlet容器,...
Tomcat监控工具Probe 1.Porbe介绍 psi-probe用于对Tomcat进行监控,比tomcat的manager强大很多。 2.下载 probe-2.3.3.zip 或者 probe.war 3.将下载好的war包,或者zip文件,放在tomcat的webapp目录下 4...
【标题】"Tomcat监控软件Probe"是一款专为Apache Tomcat服务器设计的高效监控工具,它可以帮助管理员实时了解Tomcat的运行状态,包括但不限于内存使用情况、线程状态、JVM性能指标等关键数据,从而优化服务器性能和...
【probe3.0.1(支持7,8,9) tomcat监控工具中文版】是一款专为监控Tomcat服务器设计的插件,适用于Tomcat 7、8、9这三个主要版本。这款工具提供了全面的监控功能,使得管理员可以有效地监测和优化Tomcat服务器的运行...
linux环境tomcat监控脚本
脚本调用: ./tomcat_monitor -u admin -p admin -h 127.0.0.1 -P 8080 返回信息: { "static_tomcat_version":8, "tomcat_server_status":1, "application0":{ "status":"running", "path":"/app1", "active_...
【标题】:“Tomcat监控工具” 在IT领域中,服务器的稳定性和性能是至关重要的,尤其是在使用Java EE应用服务器如Apache Tomcat时。为了更好地管理和监控Tomcat的运行状态,开发者们开发了一系列的监控工具。这里...
本文将深入探讨如何使用提供的压缩包文件来实现对Tomcat运行状态的监控,并在出现假死或异常停止时进行自动重启。这个解决方案主要依赖于一个批处理脚本"监控tomcat.bat",以及可能需要的辅助工具如"curl.exe"。 ...