`
teamojiao
  • 浏览: 350333 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

在实践中使用Jstat监控gc情况

阅读更多

性能测试过程中,我们该如何监控java虚拟机内存的使用情况,用以判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到java应用程序。
在项目实践过程中,我们探索和使用了一款新工具--Jstat。
    先秀一下。Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。
那,该怎么用呢?
    语法结构如下:jstat [Options] vmid [interval] [count]
    Options — 选项,我们一般使用 -gcutil 查看gc情况
    vmid    — VM的进程号,即当前运行的java进程号
    interval– 间隔时间,单位为秒或者毫秒
    count   — 打印次数,如果缺省则打印无数次
    下面给出一个实际的例子:




 

注:由于JVM内存设置较大,图中百分比变化不太明显

 
    图中参数含义如下:
    S0  — Heap上的 Survivor space 0 区已使用空间的百分比
    S1  — Heap上的 Survivor space 1 区已使用空间的百分比
    E   — Heap上的 Eden space 区已使用空间的百分比
    O   — Heap上的 Old space 区已使用空间的百分比
    P   — Perm space 区已使用空间的百分比
    YGC — 从应用程序启动到采样时发生 Young GC 的次数
    YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
    FGC — 从应用程序启动到采样时发生 Full GC 的次数
    FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
    GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒) 
    上图的示例,红框中,我们可以看到,5次young gc之后,垃圾内存被从Eden space区(E)放入了Old space区(O),并引起了百分比的变化,导致Survivor space使用的百分比从19.69%(S0)降到10.34%(S1)。有效释放了内存空间。绿框中,我们可以看到,一次full gc之后,Old space区(O)的内存被回收,从36.81%降到35.01%。
    图中同时打印了young gc和full gc的总次数、总耗时。而,每次young gc消耗的时间,可以用相间隔的两行YGCT相减得到。每次full gc消耗的时间,可以用相隔的两行FGCT相减得到。例如红框中表示的第一行、第二行之间发生了1次young gc,消耗的时间为52.281-52.252=0.029秒。
    常驻内存区(P)的使用率,始终停留在37.6%左右,说明常驻内存没有突变,比较正常。
如果young gc和full gc能够正常发生,而且都能有效回收内存,常驻内存区变化不明显,则说明java内存释放情况正常,垃圾回收及时,java内存泄露的几率就会大大降低。但也不能说明一定没有内存泄露。
    以上,介绍了Jstat按百分比查看gc情况的功能。其实,它还有其它功能,例如加载类信息统计功能、内存池信息统计功能等,那些是以绝对值的形式打印出来的,比较少用,在此就不做介绍。
    说了这么多专业知识,大家一定累坏了吧?轻松一刻,卖下广告~~ 
    为了更全面的监控JVM内存使用情况,我们需要引入更强大的工具来进一步分析–JConsole。敬请关注。
分享到:
评论

相关推荐

    JVM Full GC 之 MAT工具分析实践-阿沐1

    例如,使用`jstat -gc pid`可以监控老年代的大小,预测何时可能发生Full GC。 MAT工具的分析功能强大,它能解析heap dump文件,提供Histogram、Dominator Tree等视图。Histogram显示了内存中对象的分布,帮助我们...

    Java监控工具.pdf

    2. **jconsole**: jconsole 提供了一个图形用户界面,用于监控JVM的性能,包括线程使用、内存使用和垃圾收集(GC)状态。它可以帮助开发者识别内存泄漏和性能瓶颈。 3. **jhat**: jhat 用于分析Java堆转储。当需要在...

    以线上实例来看,内存泄漏的图文解决方案.docx

    ### 内存泄漏图文解决方案详解 #### 一、引言 在软件开发过程中,内存泄漏是一种常见的性能问题,尤其在高并发环境下更为突出。...同时,在日常开发中加强对内存管理的理解和实践,也是预防此类问题的有效手段之一。

    深入理解JAVA虚拟机实用技巧案例讲解.ppt

    - **jstat**:监控GC信息,如`jstat -gc`用于查看垃圾收集状态。 在分析JVM问题时,这些工具能提供宝贵的信息,帮助定位和解决问题。 总之,理解JVM的工作机制,掌握如何正确传递参数,避免大对象使用,处理好内存...

    深入jvm 内核-原理,诊断于优化视频教程

    jstat是一个命令行工具,用于收集JVM的实时性能数据,如堆内存使用情况、GC活动等。虽然它没有图形界面,但使用起来非常灵活。 #### 五、案例分析与实践 **5.1 实战案例** - **案例1:电商网站性能瓶颈定位**:...

    jvm工具、参数调优&调试技巧

    - **简介**:`jstat` 是一个用于收集JVM内部数据的工具,可以监控内存使用情况、垃圾回收状态、类装载信息等。 - **常用参数**: - `-class pid`: 显示已加载类的数量等信息。 - `-compiler pid`: 显示实时编译器...

    面试必问之jvm与性能优化_java_

    6. **JVM监控与诊断工具**:使用JVisualVM、JConsole、jmap、jstat等工具监控JVM状态,分析内存泄漏、CPU过高、GC性能等问题。 7. **编译优化**:JIT(Just-In-Time)编译器将热点代码编译为机器码,提高执行效率。...

    JVM调优视频理论及工具

    在Java开发中,JVM调优是提升应用程序性能的关键环节,尤其是在高并发、大数据处理等场景下,良好的JVM配置能显著提高系统效率。 1. **JVM概述** - JVM是Java语言的运行环境,它负责执行字节码并管理内存,为...

    JVM调优的测试项目-JVM-subject.zip

    4. **JVM监控工具**:如JVisualVM、JProfiler、YourKit等,它们提供实时的内存、线程、CPU使用情况等信息,帮助我们定位问题和调优。 5. **性能分析**:理解CPU、内存、GC日志等性能指标,学习如何使用`jmap`、`...

    Java性能调优大全

    在Oracle数据库管理中,OMM是Oracle企业管理器的一个组件,用于监控和管理数据库服务器。如果这里的OMM与Java性能优化有关,可能是指监控Java应用在Oracle环境下的性能,但这需要更多信息才能进一步解释。 4. **...

    IntelliJ IDEA 内存优化最佳实践 -.pdf

    10. 再次使用`jstat -gcutil`监控内存和GC活动。 `jstat`是Java Development Kit自带的工具,用于实时监控应用程序的内存和性能。通过`-gcutil`选项,我们可以关注年轻代(YGC和YGCT)和老年代(FGC和FGCT)的垃圾...

    生产环境jvm调优的实例代码-jvm.zip

    5. **JVM监控与诊断工具**:JVisualVM、jstat、jinfo、jmap和jhat等工具可以帮助我们监控JVM状态,分析内存泄漏,定位性能瓶颈。 6. **JVM性能日志与分析**:通过`-XX:+PrintFlagsFinal`查看默认JVM配置,`-XX:+...

    Plumbr Handbook Java Garbage Collection

    在垃圾收集的调整(Tuning)部分,手册先介绍了垃圾收集调整的基础知识,然后详细讲解了调整工具的使用方法,例如jstat、jmap、VisualVM等。这些工具对于监控和分析JVM的运行状况非常有用。最后,手册还介绍了在实际...

    美团JVM问题定位和排错

    4. **GC问题**:通过`jstat`监控GC的频率和耗时,使用`GCViewer`等工具分析GC日志,判断是否存在频繁的Full GC等问题。 5. **业务逻辑错误**:仔细审查业务日志,关注异常堆栈和错误信息,结合业务流程和上下游关系...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    实践中,我们需要根据实际情况设定JVM参数,如-Xms、-Xmx设置堆大小,-XX:NewRatio控制新生代和老年代比例,-XX:+UseConcMarkSweepGC选择合适的GC策略等。 综上所述,《实战JAVA虚拟机 JVM故障诊断与性能优化》这...

    理论与实践结合 解密JVM-day04.rar

    在深入探讨JVM(Java虚拟机)的理论与实践结合时,我们首先需要理解JVM在Java编程中的核心地位。JVM是Java平台的核心组成部分,它负责执行编译后的Java字节码,使得Java程序具备跨平台的能力。在这个解密JVM-day04的...

    Java面试题整理

    在Java中,还可以使用synchronized关键字或显式锁(Lock)来控制并发。 ### AQS(AbstractQueuedSynchronizer) AQS是Java并发包中的核心组件之一,它提供了一种实现阻塞锁和同步器的框架。通过内部的FIFO队列,...

    Performance.zip

    在IT行业中,性能优化是至关重要的一个环节,尤其是在Java虚拟机(JVM)环境中。"Performance.zip"这个压缩包文件包含的显然是关于JVM性能调优的学习笔记,这对于理解和提升Java应用的运行效率非常有帮助。JVM是Java...

    tomcat performance tuning 性能调整

    Apache Tomcat性能调整是...以上是Tomcat性能调整的一些关键点,实践中还需要根据具体的应用场景和性能需求进行细致的调整。通过不断的测试和监控,可以找到最佳的配置组合,从而提升Tomcat服务器的运行效率和稳定性。

Global site tag (gtag.js) - Google Analytics