`
afunti
  • 浏览: 105734 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

Jconsole 管理jvm中的heap

阅读更多

转载自: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):包含虚拟机器自身的所有反射资料。 比如classmothod物件。 对于使用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

分享到:
评论

相关推荐

    JVM内存设置与调优指南

    通过监控工具,如VisualVM、JConsole、JMX等,我们可以实时查看JVM状态,诊断问题并进行调优。此外,日志输出也是获取调优信息的重要途径,例如使用`-XX:+PrintGCDetails`参数开启GC日志。 总的来说,JVM内存设置与...

    Jconsole监控Java应用

    * Tenured Generation(heap):在surviver space中已经存在了一段时间之后的物件会移动到这个池中。 非堆内存池(Non-Heap Memory Pool)包括: * Code Cache(non-heap):储存编译的程式码和local variables。 ...

    Heap Dump的IBM分析工具.zip

    1. **生成heap dump**:在JVM启动时添加`-XX:+HeapDumpOnOutOfMemoryError`参数,或者通过JMX、JConsole等方式手动触发dump生成。 2. **下载并安装分析工具**:如VisualVM或MAT,确保其版本与JVM兼容。 3. **加载...

    JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

    该工具利用了内建到JVM中的JMX指令,提供实时的性能和资源的监控,包括Java应用程序的内存使用、Heap size、线程的状态、类的分配状态和空间使用等等。 jinfo jinfo是一个命令行工具,用于从崩溃的Java应用程序的...

    JConsole远程监控Tomcat

    自JDK 5.0版本开始,JConsole作为标准工具集成到了JDK中,提供了丰富的功能来监测和管理JVM。 - **主要功能**: - **内存监控**: 包括堆内存和非堆内存的使用情况。 - **线程监控**: 监控JVM中的线程状态。 - **...

    JConsole_远程监控Tomcat_ricky

    JConsole 是一个集成在 Java 开发工具包 (JDK) 中的图形用户界面 (GUI) 工具,它允许用户通过 Java 管理扩展 (JMX) 对正在运行的 Java 虚拟机 (JVM) 进行监控。为了实现远程监控,目标 JVM 必须以可管理模式启动。这...

    heapdump-tool工具

    在IT领域,内存管理是优化系统性能的关键环节,尤其是在Java应用程序中。Heapdump-tool工具是专为Java开发者设计的,用于生成和分析堆转储(Heap Dump)文件的强大工具。堆转储文件记录了Java虚拟机(JVM)在某一...

    ibm-java-堆内存分析工具-heapanalyzer

    - **生成heapdump**:通过JVM参数如`-Xdump:java+heap`配置,或者在运行时使用JConsole或VisualVM等工具触发dump。 - **打开heapdump**:使用HeapAnalyzer打开生成的dump文件。 - **分析内存**:选择合适的分析...

    IBM的HeapAnalyzer

    1. **生成heap dump**:当应用运行时,使用JConsole、VisualVM或jmap命令生成heap dump文件。 2. **打开heap dump**:在HeapAnalyzer中加载这个文件。 3. **分析**:进行对象搜索、引用分析等操作,寻找可能的问题...

    JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat.doc

    - **jps**:用于列出系统中所有JVM实例的进程ID和启动路径,便于快速识别和管理多个Java应用。 - **jstatd**:启动一个基于RMI的JVM监控服务,允许远程监控JVM状态。需要注意的是,为了安全考虑,使用`jstatd`需正确...

    IBM heapdump分析工具

    在Java应用程序运行过程中,如果遇到内存溢出或性能问题,IBM JVM会产生heapdump文件,其中包含了应用程序运行时内存的详细信息。这种文件对于排查内存泄漏、理解对象生命周期以及优化内存配置至关重要。 1. **heap...

    java虚拟机jvm及Tomcat中的jvm有关内存的设置与调优

    1. **堆内存(Heap)**:这是JVM管理的最大块内存区域,用于存储所有对象实例以及数组。堆内存又分为年轻代(Young Generation)和老年代(Old Generation),年轻代进一步细分为Eden区和两个Survivor区(S0、S1)。 2. **...

    HeapAnalyzer

    当JVM遇到内存溢出等问题时,可以通过命令行参数或者JConsole等工具生成heap dump文件。这个文件包含了JVM在某个时间点的内存快照,包括所有对象、类信息以及它们的引用关系。 4. **HeapAnalyzer的工作原理** Heap...

    jvm和gc详解及调优

    书中详尽地阐述了JVM的工作原理,以及如何进行有效的性能优化,旨在帮助读者理解并掌握Java内存管理的关键技术。 JVM是Java程序运行的基础,它是Java平台的核心组成部分,负责解释和执行Java字节码。书中可能涵盖了...

    java中jvm内存分配相关资料总结整理

    - **监控与诊断**:使用JVisualVM、JConsole等工具监控JVM状态,找出内存泄漏和性能瓶颈。 - **内存分析**:通过内存分析工具如MAT(Memory Analyzer Tool)分析heap dump文件,了解内存占用情况。 6. **内存模型...

    JVM 监控 调优 工具

    1. **堆内存(Heap)**:这是JVM中最大的一块内存区域,主要用于存储对象实例。堆被进一步划分为新生代(Young Generation)和老年代(Tenured/Old Generation),新生代又包括Eden区和两个Survivor区(From、To)。...

    ibm HeapAnalyzer java内存分析工具 ha457.jar

    IBM HeapAnalyzer是一款强大的Java内存分析工具,主要用于诊断和解决Java应用程序中的内存泄漏问题。...在实际开发中,结合JConsole、JVisualVM等其他JVM监控工具,可以更全面地理解和优化Java应用的内存使用情况。

    JVM_Troubleshooting_Guide.pdf

    在JVM调优过程中,首要的知识点是理解JVM内存模型。JVM内存分为堆内存(Heap)、栈内存(Stack)、方法区(Method Area)、本地方法栈(Native Method Stack)和程序计数器(PC Register)。堆内存主要存储对象实例...

    JVM Diagnostics Guide 1.4.2

    5. **性能调优**:涵盖JVM性能监控工具的使用,如JConsole、VisualVM等,以及如何通过调整JVM参数(如-Xms, -Xmx, -XX:NewRatio等)来优化内存分配和垃圾收集策略。 6. **线程分析**:讲解如何理解和诊断线程问题,...

Global site tag (gtag.js) - Google Analytics