`
不爱不见
  • 浏览: 286036 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Memory Analyzer tool 检测OutofMemory异常

    博客分类:
  • JVM
阅读更多
1.插件Memory Analyzer tool 的详细安装参考如下网址:
http://blog.csdn.net/yhc13429826359/article/details/7711911
2.我这次发生错误的程序代码如下:
public static void readLogBufferRead(String logPath){
BufferedReader bufferReader = null;
try{
bufferReader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(logPath))));
String readLine = null;
int count = 0  ;
while((readLine = bufferReader.readLine()) != null){
System.out.println("count1:"+count+++"---"+readLine);
System.gc() ;
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(bufferReader != null){
try {
bufferReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

3.检查程序发生错误原因的步骤:
1>根据异常原因确定是while((readLine = bufferReader.readLine()) != null)这行代码发生了堆溢出。
2>本次通过bufferReader读取的文件大小为2.66G,观察产生溢出的方法是否有对对象的强引用,发生没有对对象的强引用,只有一个String类型的readLine局部变量,但是每次读取的时候都会进行释放,否则jvm发现空间不够的时候也会进行空间的释放。
3>确定了不是局部变量的原因后确定是readLine()方法里面的内容发生了异常,就是jdk发生了内存溢出,观看BufferReader的源码,找到如下的代码:
    public AbstractStringBuilder append(char str[], int offset, int len) {
        int newCount = count + len;
if (newCount > value.length)
    expandCapacity(newCount);
System.arraycopy(str, offset, value, count, len);
count = newCount;
return this;
    }
这是缓冲类在空间不够时申请分配空间的代码,另外读取的时候以文件的"\n"作为读取一行的标志,此时确定产生问题的原因有两个:一是java的堆空间设置不够大,二是读取的那一行已经超过了java堆的最大大小。
3>在程序运行时加入虚拟机的启动参数:-XX:+HeapDumpOnOutOfMemoryError ,这样就能够在抛出内存溢出错误时对产生的原因进行分析,产生的异常转储快照已经放在了附件中,经过Memory Analyzer tool 查看分析得出,系统要分配的内存过大,并没有对象不释放的情况,由此推断是读取的一行过于庞大,联想起文件写入的代码段如下:
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,true)));
                  writer.write(System.currentTimeMillis()+"|taiyuan|china|today|goodBoy|believe");
推断出来时换行符引起的。
4>证明猜想,利用程序生成同样大小的文件,每一行写入后都加入"\n",然后用同样的程序来读取文件,发生一切正常,事实证明是“\n"引起的。
  • 大小: 142.6 KB
  • 大小: 143.8 KB
分享到:
评论

相关推荐

    MemoryAnalyzer-win32.win32.x86-64.rar

    MemoryAnalyzer,通常被称为MAT(Memory Analyzer Tool),是由Eclipse基金会开发的一款强大的内存分析工具。它能够帮助开发者定位并解决Java应用程序中的内存泄漏问题,以及分析堆内存的使用情况。对于“Memory...

    Memory Analyzer

    内存分析是软件开发过程中的重要环节,特别是在性能优化和故障排查时显得尤为关键。...对于版本memoryanalyzer_v1.5.0,用户可以期待其稳定性和功能的完善性,但也要关注后续更新,以利用最新的优化和改进。

    MemoryAnalyzer.x86_64

    当遇到性能问题或者内存溢出(Out Of Memory, OOM)异常时,对JVM内存进行深入分析显得尤为必要。MemoryAnalyzer.x86_64,这个强大的工具,便是专为了解决这类问题而生。它能够详尽地分析堆内存中的对象,帮助我们找...

    tomcat out of memory

    可以使用内存分析工具,如VisualVM、MAT(Memory Analyzer Tool)或JProfiler,来检测和定位内存泄漏。确保正确关闭数据库连接、HTTP会话和其他资源,防止它们占用过多内存。 3. **大数据对象**:如果你的应用程序...

    MemoryAnalyzer-1.5.0.20150527-win32.win32.x86_64.zip

    这个“MemoryAnalyzer-1.5.0.20150527-win32.win32.x86_64.zip”文件,即为MAT的Windows 32位和64位兼容版本,发布日期为2015年5月27日。MAT的强大之处在于它能帮助开发者深入理解JVM(Java虚拟机)的内存管理,尤其...

    mat内存分析工具win64.zip

    在Windows 64位操作系统环境下,MAT提供了深入洞察内存消耗情况的能力,帮助开发者诊断并修复OOM(Out of Memory)错误。 在描述中提到的“oom问题”,即内存溢出问题,是Java应用程序常见的运行时问题之一。当程序...

    OOM分析工具-MemoryAnalyzer.zip

    在Java开发过程中,内存管理是至关重要的一环,尤其对于大型、高并发的应用来说,内存溢出(Out of Memory,简称OOM)问题可能导致系统崩溃,严重影响服务稳定性。为了解决这类问题,开发者需要借助专门的工具进行...

    MAT解析hprof内存溢出分析工具OutOfMemoryError-java程序开发

    MAT(Memory Analyzer Tool)是IBM提供的一款强大的Java内存分析工具,它专为解决此类问题而设计,帮助开发者深入理解内存消耗,有效地定位内存泄漏和性能瓶颈。 MAT的使用方法和功能详解: 1. **数据获取**:首先...

    android bitmap outOfMemory解决方法

    7. **监控内存使用**:利用Android的`ActivityManager`或第三方工具如MAT(Memory Analyzer Tool),可以分析应用的内存使用情况,找出内存泄漏和不必要的内存占用。 通过以上方法,开发者可以有效地管理和控制...

    java 内存溢出分析工具 HeapAnalyzer

    Java内存溢出(Out of Memory,OOM)是Java应用程序中常见的问题,会导致程序崩溃或性能急剧下降。HeapAnalyzer是一款强大的工具,专为分析Java应用程序的内存状况,特别是针对内存溢出问题进行诊断。本文将详细介绍...

    idea git提交内存溢出后dump文件

    分析`heapDump.hprof`文件可以使用各种工具,例如Oracle的JVisualVM、Eclipse Memory Analyzer Tool (MAT)或IntelliJ IDEA自身的内存分析插件。这些工具可以帮助我们找出内存泄漏的根源,例如查找长时间存活且占用...

    Android避免内存溢出(Out of Memory)方法汇总

    在Android开发中,内存管理是至关重要的,尤其是避免内存溢出(Out of Memory,简称OOM)。内存溢出会导致应用程序崩溃,影响用户体验。本篇文章将详细阐述如何在Android中有效地防止内存溢出,主要包括理解不同类型...

    IBM官方文档,websphere 内存泄漏分析步骤和工具使用

    1. **理解导致OutOfMemory条件的原因** 2. **使用Tivoli Performance Viewer检测内存溢出状况** 3. **获取详细的垃圾收集(GC)日志** 4. **获取Java堆内存快照(Heap Dump)** 5. **解读详细的垃圾收集日志** 6. **...

    IBM HeapAnalyzer

    IBM HeapAnalyzer与VisualVM、MAT(Eclipse Memory Analyzer Tool)等其他内存分析工具相比,可能有特定的优势,例如对IBM J9 JVM的深入支持,或者在特定场景下的分析效率和准确性。 通过熟练掌握IBM HeapAnalyzer...

    编译时出现java.lang.OutOfMemoryError Java heap space异常

    - 使用工具如VisualVM或MAT (Memory Analyzer Tool)来检测和定位潜在的内存泄漏点。 - 定期清理无用的临时文件和缓存数据。 4. **合理设置线程池大小**: - 在使用线程池时,合理设置最大线程数,避免因线程...

    mat_win.zip

    Memory Analyzer tool(MAT) 分析内存泄漏,平时工作过程中,有时会遇到OutOfMemoryError,我们知道遇到Error一般表明程序存在着严重问题,可能是灾难性的。所以找出是什么原因造成OutOfMemoryError非常重要。现在向...

    me_android_memory

    图片加载是内存消耗的大户,合理使用`BitmapFactory.Options`设置解码参数,避免加载过大图片导致OOM(Out Of Memory)错误。 9. **内存快照和比较**: 通过对比不同时间点的内存快照,可以找出内存占用增加的...

    Dump文件解析 IBM提供

    总的来说,理解并熟练使用IBM提供的Dump文件解析工具是Java开发者必备的技能之一,它能帮助我们有效地定位和解决"OutOfMemory"这样的复杂问题,从而提升系统的稳定性和性能。通过深入学习和实践,我们可以更有效地...

    java-error-in-idea64主要是javaJVM的dump导出学习使用

    Java错误在IDEA64中通常涉及到Java虚拟机(JVM)的问题,特别是当出现“Out Of Memory”(OOM)异常时。这个错误表明程序在运行过程中耗尽了可用内存,导致JVM无法正常工作。在这种情况下,程序员会生成一个heap ...

Global site tag (gtag.js) - Google Analytics