转载自:http://tw.myblog.yahoo.com/eoda227/article?mid=544&prev=551&next=499
使用jconsole 来监视Java 程式使用资源最近的专案都需要使用Java来开发程式,在Java程式开发中需要一些java程式debug与性能调整方面的工作,jconsole是jdk内建的工具比较好用。
Jconsole简介: Jconsole是一个JMX相容的监视工具。 它使用Java虚拟机器的JMX机制来提供运行在Java平台的应用程式的性能与资源耗费资讯。
开始jconsole(我是使用jdk6)
Jconsole应用程式位于JDK_HOME/bin目录下。
可以使用jconsole 监视本地应用程式和远端应用程式。
注意:在开发阶段或者原型阶段,使用jconsole监视本地应用程式是很有用的,但是不建议在正式环境中使用,因为jconsole本身也将显著的消耗系统资源。 推荐使用远端监视来将jconsole和被监视平台孤立开。
监视本地应用程式 (我用Eclipse来当被监测对象)
1. 开启eclipse
2. 开启jconsole,选”Local Process” 中刚才开启的eclipse,按“Connect” 来监看
Jconsole介面: Jconsole介面由以下六个选页签组成:
- Overview页签:显示JVM和被监视值的汇总资讯。
- Memory页签:显示记忆体使用资讯。
- Threads页签:显示执行绪使用资讯。
- Classes页签:显示类(class)载入资讯。
- VMSummary页签:显示JVM资讯。
- MBeans页签:显示MBeans资讯。
以下是详细介绍:
(1) Overview页签
- 有Heap记忆区使用情况
- Threads个数
- Class载入个数
- CPU使用百分比
(2) Memory 页签
以上图表显示了JVM的记忆体使用和时间的对应关系,主要包括: (a) heap和(b) non-heap
PS.
Heap and Non-heap记忆体:JVM管理两种记忆体:heap 和non-heap 记忆体,两种记忆体都是在JVM启动时建立。
Heap memory 是运行时资料区域,用于JVM为所有物件实例和伫列分配的记忆体。 Heap可能为固定值或者可变值。 垃圾收集器是一个用于回收物件占用的heap记忆体的自动化记忆体管理系统。
Non-heap memory 包含一个在所有执行序共用的方法区域(method area)和内部进程或JVM优化所需的记忆体。它存储了每一个类的结构,比如运行常量池,栏位和方法资料,构造函数和方法的代码。 方法区域逻辑上是heap的一部分,但是依赖于实现,JVM可能不进行垃圾收集或压缩。 像heap一样,方法区域可能为固定或可变大小。 方法区域所需要的记忆体没有必要是连续的。
Heap Memory Pool:
A. Eden Space(heap):大多数物件初始化时从Eden Space池分配记忆体,即是存在于此池中
B. Survivor Space(heap):此池包含的物件是那些原先在eden space中,但是已经经历过垃圾回收而仍然存在的物件。
C. Tenured Generation(heap):在surviver space中已经存在了一段时间之后的物件会移动到这个池中。
Non-Heap Memory Pool:
D. Code Cache (non-heap):储存编译的程式码和local variables。
E. Permanent Generation(non-heap):包含虚拟机器自身的所有反射资料。 比如class和mothod物件。 对于使用class data sharing的JVM,分为唯读(shared-ro)和读写(shared-rw)两个区域。
Details区域显示了几种当前记忆体度量:
Time:目前的时间。
Used:目前使用的记忆体总量。
Committed:JVM可使用的记忆体量。 Committed记忆体数量可能随时间变化而变化。 JAVA虚拟机器可能将某些记忆体释放,还给作业系统,committed记忆体可能比启动时初始分配的记忆体量要少。 Committed记忆体总是大于等于used记忆体。
Max:记忆体管理可用的最大记忆体数量。 此值可能改变或者为未定义。 如果JVM试图增加使用记忆体(used memory)超出了committed记忆体,那么即时使用记忆体小于或者等于最大记忆体(比如系统虚拟记忆体较低),记忆体分配仍可能失败。
GC Time:Garbage collection的时间。
Permanent Generation的排列如下图:
(3) Threads页签
(4) Classes页签
(5) VMSummary页签
(6) MBeans页签
3. 开启Eclipse中的Tomcat (1) 在index.jsp 上点选右键
(2) 选Run on Server 执行
(3) 执行后结果
4. 切换到jconsole视窗,观看结果
(1) Overview图有明显变化
(2) Heap memory Usage
(2) Non-Heap memory Usage
监视远端应用程式 (以Tomcat为测试对象)
1. 配置tomcat使用jconsole
修改catalina脚本
Windows平台:修改catalina.bat,在”dostart:” 后增加一行(注意是一行):
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="9005" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote .ssl="false"
Unix/Linux平台:修改catalina.sh,在”dostart:” 后增加一行(注意是一行):
JAVA_OPTS="$JAVA_OPTS "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="9005" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote .ssl="false"
2. 启动Tomcate (startup.bat或启动service)
3. 到远端的电脑,启动jconsole
4. 可同样观察远端Tomcat执行情况
注:如果想设定远端的管理帐号密码,可以参考
http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html 的设定
通常在发生“
Memory Error”如Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
或
Exception unloading sessions to persistent storage java.lang.OutOfMemoryError: PermGen space
请调整JVM的参数设定,-XX:PermSize=256M -XX:MaxPermSize=256M等参数(依个人电脑上的资源与可能用到的记忆过大小再去设定,观察Memory页签,大概多留20%就够了)
属性详细请参考:http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
参考来源:http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
相关推荐
通过监控工具,如VisualVM、JConsole、JMX等,我们可以实时查看JVM状态,诊断问题并进行调优。此外,日志输出也是获取调优信息的重要途径,例如使用`-XX:+PrintGCDetails`参数开启GC日志。 总的来说,JVM内存设置与...
* Tenured Generation(heap):在surviver space中已经存在了一段时间之后的物件会移动到这个池中。 非堆内存池(Non-Heap Memory Pool)包括: * Code Cache(non-heap):储存编译的程式码和local variables。 ...
1. **生成heap dump**:在JVM启动时添加`-XX:+HeapDumpOnOutOfMemoryError`参数,或者通过JMX、JConsole等方式手动触发dump生成。 2. **下载并安装分析工具**:如VisualVM或MAT,确保其版本与JVM兼容。 3. **加载...
该工具利用了内建到JVM中的JMX指令,提供实时的性能和资源的监控,包括Java应用程序的内存使用、Heap size、线程的状态、类的分配状态和空间使用等等。 jinfo jinfo是一个命令行工具,用于从崩溃的Java应用程序的...
JConsole 是一个集成在 Java 开发工具包 (JDK) 中的图形用户界面 (GUI) 工具,它允许用户通过 Java 管理扩展 (JMX) 对正在运行的 Java 虚拟机 (JVM) 进行监控。为了实现远程监控,目标 JVM 必须以可管理模式启动。这...
在IT领域,内存管理是优化系统性能的关键环节,尤其是在Java应用程序中。Heapdump-tool工具是专为Java开发者设计的,用于生成和分析堆转储(Heap Dump)文件的强大工具。堆转储文件记录了Java虚拟机(JVM)在某一...
- **生成heapdump**:通过JVM参数如`-Xdump:java+heap`配置,或者在运行时使用JConsole或VisualVM等工具触发dump。 - **打开heapdump**:使用HeapAnalyzer打开生成的dump文件。 - **分析内存**:选择合适的分析...
- **jps**:用于列出系统中所有JVM实例的进程ID和启动路径,便于快速识别和管理多个Java应用。 - **jstatd**:启动一个基于RMI的JVM监控服务,允许远程监控JVM状态。需要注意的是,为了安全考虑,使用`jstatd`需正确...
1. **生成heap dump**:当应用运行时,使用JConsole、VisualVM或jmap命令生成heap dump文件。 2. **打开heap dump**:在HeapAnalyzer中加载这个文件。 3. **分析**:进行对象搜索、引用分析等操作,寻找可能的问题...
在Java应用程序运行过程中,如果遇到内存溢出或性能问题,IBM JVM会产生heapdump文件,其中包含了应用程序运行时内存的详细信息。这种文件对于排查内存泄漏、理解对象生命周期以及优化内存配置至关重要。 1. **heap...
1. **堆内存(Heap)**:这是JVM管理的最大块内存区域,用于存储所有对象实例以及数组。堆内存又分为年轻代(Young Generation)和老年代(Old Generation),年轻代进一步细分为Eden区和两个Survivor区(S0、S1)。 2. **...
当JVM遇到内存溢出等问题时,可以通过命令行参数或者JConsole等工具生成heap dump文件。这个文件包含了JVM在某个时间点的内存快照,包括所有对象、类信息以及它们的引用关系。 4. **HeapAnalyzer的工作原理** Heap...
书中详尽地阐述了JVM的工作原理,以及如何进行有效的性能优化,旨在帮助读者理解并掌握Java内存管理的关键技术。 JVM是Java程序运行的基础,它是Java平台的核心组成部分,负责解释和执行Java字节码。书中可能涵盖了...
- **监控与诊断**:使用JVisualVM、JConsole等工具监控JVM状态,找出内存泄漏和性能瓶颈。 - **内存分析**:通过内存分析工具如MAT(Memory Analyzer Tool)分析heap dump文件,了解内存占用情况。 6. **内存模型...
1. **堆内存(Heap)**:这是JVM中最大的一块内存区域,主要用于存储对象实例。堆被进一步划分为新生代(Young Generation)和老年代(Tenured/Old Generation),新生代又包括Eden区和两个Survivor区(From、To)。...
IBM HeapAnalyzer是一款强大的Java内存分析工具,主要用于诊断和解决Java应用程序中的内存泄漏问题。...在实际开发中,结合JConsole、JVisualVM等其他JVM监控工具,可以更全面地理解和优化Java应用的内存使用情况。
在JVM调优过程中,首要的知识点是理解JVM内存模型。JVM内存分为堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、本地方法栈(Native Method Stack)和程序计数器(PC Register)。堆内存主要存储对象实例...
5. **性能调优**:涵盖JVM性能监控工具的使用,如JConsole、VisualVM等,以及如何通过调整JVM参数(如-Xms, -Xmx, -XX:NewRatio等)来优化内存分配和垃圾收集策略。 6. **线程分析**:讲解如何理解和诊断线程问题,...