`

内存溢出跟踪笔录

阅读更多
最近一直被内存溢出捆扰,现在对这几天的工作做个小小的总结!另外给首次与到此类问题的小鸟们作个提示,希望大家早日变成老鸟!

1 首先确认是不是内存溢出,如果直接报OutOfMemoryException,那肯定是内存溢出,有时可能没有发现这个错误,但WEB服务到最后还是挂了,也有可能是由Memory Out,如何确认,最好的办法就是查看gc日志。

2 如果确认是内存溢出,不要急着跟踪,因为要找到确切位置还是有一定困难的,个人建议对最近修改的代码作一次全面检查,对于有可能出现内存溢出的地方作些修改。
可能出现的原因:
(1) 递归、循环,这里要注意隐性的地笔,如拦载器,我自已遇到一次拦载器的死循环
(2) static 的对象,查看static里面是不是有大量的对象塞进去
(3)Set/List/Map对象,查看Set/List/Map里面是不是有对象用完了没有释放
(4)session/application,查看session里的对象、过期时间等,看是不是无法即时释放
(5)ClassLoader,Java ClassLoader结构的使用为内存泄漏提供了许多可乘之机。这个我不知道深层原因,有知道的可以告诉我,将不胜感谢!
(6)String,字符串累加也容易出现溢出。一般顺序StringBuilder,StringBuffer,String。
(7)全局变量,尽量不使用,使用了即时释放
修改后再查看日志,也许问题已经解决了。

3 如果还是有溢出就只能上工具了,我使用的是JProfiler,功能很强大,首先我在window上远程监控linux,结果失败,原因是因为JProfiler本身就有很大的消耗,而且在测试中还要不断gc,影响生产,所以选用在测试环境中配合jmeter测试。

4 测试方法:循环测试,查看gc后是否有对象数量不断增加,即有对象未释放。

5 其此是要了解java内存分配原理和gc的工作原理,这样才可以定位到问题的具体位置。

6 对jvm进行优化。




具体操作未详细说明,可以参考相关资料

java内存泄漏原因 http://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/

gc原理http://chenchendefeng.iteye.com/blog/455883

jvm优化http://www.cjsdn.net/post/view?bid=1&id=197954

JVM调优-解决native heap持续增长 http://sw1982.iteye.com/blog/724626 荐



分享到:
评论

相关推荐

    内存溢出配置,内存溢出配置

    内存溢出配置是IT行业中,尤其是在Java应用开发与运维领域中的一个重要话题,它涉及到系统资源管理、性能调优以及故障排查等多个方面。标题与描述中重复提到“内存溢出配置”,这表明了对这一主题的关注与重视。接...

    Qt内存溢出检测

    在测试过程中,你可以运行包含VLD的程序,它会在控制台输出内存泄漏的详细信息,包括泄漏内存的大小、分配时的堆栈跟踪等。这样,你可以根据这些信息找到导致泄漏的代码位置并修复它。 在你的压缩包文件`test_...

    内存泄漏与内存溢出

    在软件开发领域,尤其是涉及到数据库应用的场景下,内存泄漏(Memory Leak)和内存溢出(Out of Memory,简称OOM)是两个常见的问题,它们直接影响到程序的性能、稳定性和可扩展性。以下是对这两个概念及其相关知识...

    JAVA内存溢出问题总结

    JAVA 内存溢出问题是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用的内存大于虚拟机能提供的最大内存。内存溢出问题可以从容器和程序类两个方面进行排查,容器问题可以调整容器参数来解决...

    JVM内存溢出问题解析

    JVM 内存溢出问题解析 JVM 内存溢出是指程序运行所需的内存大于虚拟机能提供的最大内存的情况。这种情况可能是由于数据量过大、死循环、静态变量和静态方法过多、递归、无法确定是否被引用的对象等原因引起的。同时...

    MySQL OOM(内存溢出)的解决思路

    OOM全称”Out Of Memory”,即内存溢出。 内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。 内存溢出...

    易语言防止文件内存溢出源码

    在编程领域,内存管理是至关重要的,特别是在处理大文件时,如何有效防止内存溢出是开发者需要关注的核心问题。易语言是一种以中文编程为特色的编程环境,它为初学者提供了友好的界面和易于理解的语法。在这个场景下...

    maven内存溢出解决放啊

    ### Maven内存溢出解决方案 #### 一、引言 在使用Maven进行项目构建时,尤其是在处理大型项目或执行资源密集型任务(如`mvn site`)时,经常会遇到Java堆空间溢出的问题。这类问题通常是由于Maven运行所需的内存...

    Python内存泄漏和内存溢出的解决方案

    虽然Python有内置的垃圾回收机制,但仍然可能出现内存泄漏和内存溢出的问题,影响程序的稳定性和效率。 **一、Python内存泄漏** 内存泄漏通常是由于以下几个原因引起的: 1. **C扩展模块的内存泄漏**:使用C语言...

    解决jetty8内存溢出版本

    在处理高并发或者大型应用时,内存管理是关键问题,而"内存溢出"则是一个常见的性能瓶颈。内存溢出(Out of Memory,OOM)通常发生在系统无法分配足够的内存给程序运行时,这可能导致服务器崩溃或性能急剧下降。 ...

    如何避免JDBC引起的内存溢出情况

    ### 如何避免JDBC引起的内存溢出情况 在日常的软件开发过程中,特别是在处理大量数据时,使用Java数据库连接(JDBC)进行数据库操作是非常常见的。然而,在处理大数据集时,如果不注意细节,很容易遇到内存溢出的...

    myeclipse内存溢出问题解决方案

    内存溢出问题在Java开发中是一个常见的问题,尤其是在使用集成开发环境如MyEclipse时,由于资源消耗较大,可能会频繁出现。本文主要讨论如何解决MyEclipse中的内存溢出问题以及相关的Java内存管理知识点。 首先,...

    phpExcel导出大量数据出现内存溢出错误的解决方法

    然而,在这个过程中,开发者经常面临内存溢出错误的问题。这主要是因为phpExcel在内存中保存单元格信息,当数据量大时,内存消耗超过PHP配置的最大值,导致错误。下面将详细探讨如何解决phpExcel导出大量数据时出现...

    内存溢出解决

    ### 内存溢出解决 #### 背景与概念 在Java开发中,内存管理是确保应用程序稳定运行的关键因素之一。当程序运行时分配给它的内存空间不足以支撑其正常运行时,就会出现“内存溢出”(Out of Memory Error,简称OOM...

    易语言防止文件内存溢出

    在编程领域,内存管理是至关重要的一个环节,尤其是在处理大文件时,防止内存溢出显得尤为重要。易语言作为一款国产的、面向对象的编程语言,虽然语法简洁,但同样需要处理好内存分配与释放的问题。本篇文章将深入...

    大数据Excel操作不会内存溢出POI

    绝对原创,这是我在项目中解决大数据Excel导入时内存溢出问题而编写的Excel行级解析器。同时支持Excel-2003和Excel-2007,excel-2003解析采用poi的eventusermodel模式实现,2007采用xmlreader实现,经项目验证,...

    处理bitmap内存溢出问题

    在Android开发中,处理`Bitmap`内存溢出问题是一个常见的挑战,尤其是在处理高分辨率或大尺寸图片时。当应用程序尝试加载或操作一张超出虚拟机内存预算的`Bitmap`时,系统会抛出`java.lang.OutOfMemoryError: bitmap...

    图片过大引起的内存溢出解决方案

    ### 图片过大引起的内存溢出解决方案 在Android开发过程中,我们经常会遇到因加载大尺寸图片而引发的`OutOfMemoryError`(内存溢出错误)。这种问题通常发生在使用`BitmapFactory`来加载图片时,尤其是在资源有限的...

Global site tag (gtag.js) - Google Analytics