2024年5月3日发(作者:)
教你使用JRMC(内存分析工具)
作者:(阮高朋)
发表日期:2010年08月30日
简介
内存溢出是大部分大型java项目都无法避免的问题,为了解决这个历史性难题,内存
分析工具也层出不穷,SUN JDK提供JDKPI和JDKTI、jmap、Quest公司的JProbe等
等,但是很多工具由于资源消耗过大,只能在测试环境使用,无法诊断生产环境内存溢出
的问题。
本文介绍一种内存分析工具:BEA JRockit Mission Control即JRMC,用来诊断内存
溢出并指出根本原因。该工具的开销非常小,因此可以使用它来寻找生产环境中的系统的
内存溢出。
什么是内存溢出
Java虚拟机和垃圾回收器负责管理内存任务,但是Java应用系统中还是有可能出现
内存泄漏,OOM(outofmemory)的现象在许多项目中也是一个常见的问题。避免内存
溢出首先是要弄清楚它是如何发生的,然后对症下药。
Oom的根源基本上分为三种:
一、 内存分配过小,不满足应用的需要,应用无法分配到所需要的内存就会发生
oom。
二、 应用程序逻辑不合理,申请过多的内存,导致内存耗尽,发生oom。例如从数
据库获取大量数据一次性展现在web页面上。
三、 Java程序内存泄露。
前面两条好理解,那什么是内存泄露呢,为什么Java 虚拟机的垃圾收集器不能回收
内存呢?因为垃圾回收器垃圾收集的对象只能是不再被引用的对象。但是,某些不再需要
的对象,却在系统的某个地方仍在引用它,这样就不能对这些对象进行垃圾收集,在日志
中的大量String对象的生成以及编写Java代码时的一些常见的内存泄漏陷阱等等都会造
成内存泄漏,但是要在开发阶段完成找出造成泄漏的代码是非常困难的。Java代码中的内
存泄漏是常见而且难于解决的问题,这些泄漏问题通常是在最不愿意它发生的正式生产环
境中发现的,而且它也很难于在开发与测试环境中得到重现。这是为什么呢?生产环境中
的系统需要处理更大量的数据,而且有可能在运行很长时间后才会发现 Java堆在缓慢地
增长。最终,导致系统内存耗尽。
JRMC详解
它包括三个独立的应用程序:内存泄漏监测器(Memory Leak Detector)、JVM运
行时分析器(Runtime Analyzer)和管理控制台(Management Console)。
➢ JRockit Management Console
发布评论