http://rdc.taobao.com/blog/qa/?p=1198
性能测试过程中,我们该如何监控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内存泄露的几率就会大大降低。但也不能说明一定没有内存泄露。
- 大小: 56.6 KB
分享到:
相关推荐
例如,使用`jstat -gc pid`可以监控老年代的大小,预测何时可能发生Full GC。 MAT工具的分析功能强大,它能解析heap dump文件,提供Histogram、Dominator Tree等视图。Histogram显示了内存中对象的分布,帮助我们...
2. **jconsole**: jconsole 提供了一个图形用户界面,用于监控JVM的性能,包括线程使用、内存使用和垃圾收集(GC)状态。它可以帮助开发者识别内存泄漏和性能瓶颈。 3. **jhat**: jhat 用于分析Java堆转储。当需要在...
### 内存泄漏图文解决方案详解 #### 一、引言 在软件开发过程中,内存泄漏是一种常见的性能问题,尤其在高并发环境下更为突出。...同时,在日常开发中加强对内存管理的理解和实践,也是预防此类问题的有效手段之一。
- **jstat**:监控GC信息,如`jstat -gc`用于查看垃圾收集状态。 在分析JVM问题时,这些工具能提供宝贵的信息,帮助定位和解决问题。 总之,理解JVM的工作机制,掌握如何正确传递参数,避免大对象使用,处理好内存...
jstat是一个命令行工具,用于收集JVM的实时性能数据,如堆内存使用情况、GC活动等。虽然它没有图形界面,但使用起来非常灵活。 #### 五、案例分析与实践 **5.1 实战案例** - **案例1:电商网站性能瓶颈定位**:...
- **简介**:`jstat` 是一个用于收集JVM内部数据的工具,可以监控内存使用情况、垃圾回收状态、类装载信息等。 - **常用参数**: - `-class pid`: 显示已加载类的数量等信息。 - `-compiler pid`: 显示实时编译器...
6. **JVM监控与诊断工具**:使用JVisualVM、JConsole、jmap、jstat等工具监控JVM状态,分析内存泄漏、CPU过高、GC性能等问题。 7. **编译优化**:JIT(Just-In-Time)编译器将热点代码编译为机器码,提高执行效率。...
在Java开发中,JVM调优是提升应用程序性能的关键环节,尤其是在高并发、大数据处理等场景下,良好的JVM配置能显著提高系统效率。 1. **JVM概述** - JVM是Java语言的运行环境,它负责执行字节码并管理内存,为...
4. **JVM监控工具**:如JVisualVM、JProfiler、YourKit等,它们提供实时的内存、线程、CPU使用情况等信息,帮助我们定位问题和调优。 5. **性能分析**:理解CPU、内存、GC日志等性能指标,学习如何使用`jmap`、`...
在Oracle数据库管理中,OMM是Oracle企业管理器的一个组件,用于监控和管理数据库服务器。如果这里的OMM与Java性能优化有关,可能是指监控Java应用在Oracle环境下的性能,但这需要更多信息才能进一步解释。 4. **...
10. 再次使用`jstat -gcutil`监控内存和GC活动。 `jstat`是Java Development Kit自带的工具,用于实时监控应用程序的内存和性能。通过`-gcutil`选项,我们可以关注年轻代(YGC和YGCT)和老年代(FGC和FGCT)的垃圾...
5. **JVM监控与诊断工具**:JVisualVM、jstat、jinfo、jmap和jhat等工具可以帮助我们监控JVM状态,分析内存泄漏,定位性能瓶颈。 6. **JVM性能日志与分析**:通过`-XX:+PrintFlagsFinal`查看默认JVM配置,`-XX:+...
在垃圾收集的调整(Tuning)部分,手册先介绍了垃圾收集调整的基础知识,然后详细讲解了调整工具的使用方法,例如jstat、jmap、VisualVM等。这些工具对于监控和分析JVM的运行状况非常有用。最后,手册还介绍了在实际...
4. **GC问题**:通过`jstat`监控GC的频率和耗时,使用`GCViewer`等工具分析GC日志,判断是否存在频繁的Full GC等问题。 5. **业务逻辑错误**:仔细审查业务日志,关注异常堆栈和错误信息,结合业务流程和上下游关系...
### JDK内存管理详解 #### 一、概述 Java 虚拟机 (JVM) 的内存...通过学习这些内容,开发者能够更加深入地理解 Java 的内存模型,并能够在实践中有效地管理和优化应用程序的内存使用,从而提高系统的稳定性和性能。
实践中,我们需要根据实际情况设定JVM参数,如-Xms、-Xmx设置堆大小,-XX:NewRatio控制新生代和老年代比例,-XX:+UseConcMarkSweepGC选择合适的GC策略等。 综上所述,《实战JAVA虚拟机 JVM故障诊断与性能优化》这...
在深入探讨JVM(Java虚拟机)的理论与实践结合时,我们首先需要理解JVM在Java编程中的核心地位。JVM是Java平台的核心组成部分,它负责执行编译后的Java字节码,使得Java程序具备跨平台的能力。在这个解密JVM-day04的...
在Java中,还可以使用synchronized关键字或显式锁(Lock)来控制并发。 ### AQS(AbstractQueuedSynchronizer) AQS是Java并发包中的核心组件之一,它提供了一种实现阻塞锁和同步器的框架。通过内部的FIFO队列,...
在IT行业中,性能优化是至关重要的一个环节,尤其是在Java虚拟机(JVM)环境中。"Performance.zip"这个压缩包文件包含的显然是关于JVM性能调优的学习笔记,这对于理解和提升Java应用的运行效率非常有帮助。JVM是Java...
Apache Tomcat性能调整是...以上是Tomcat性能调整的一些关键点,实践中还需要根据具体的应用场景和性能需求进行细致的调整。通过不断的测试和监控,可以找到最佳的配置组合,从而提升Tomcat服务器的运行效率和稳定性。