Memory Leak分析分享

本文分享了在处理内存泄漏问题时的两个关键点:连接池泄漏和LinkedBlockingQueue问题。通过JProfiler进行分析,发现连接池由于特定的业务场景和数据库查询导致资源未释放。在ibatis的Throttle中,等待状态的线程导致了连接池耗尽的假象。此外,LinkedBlockingQueue的poll方法在高并发场景下可能导致内存泄漏。尽管1.6版本的JDK有所改进,但问题仍然存在,使用take方法可能是个更好的选择。
摘要由CSDN通过智能技术生成

       越是忙,杂七杂八的事情越多,最近正在优化Memcache的客户端代码,这时候SIP突然出现OOM的问题(Out of Memory),作开发最头痛就是这种问题,压力测试都作过,早期的几个版本都没有出现这样的问题,因此怀疑可能是最近一次发布修改引起的。借助JProfiler在测试环境搭了一套系统,开始做压力测试,来分析Memory到底流到了哪里去了。

 

问题一:连接池泄漏

       看到这个问题,我想很多人都说,都什么年代了,使用开源的现成连接池,怎么还会有这样的问题,又不是那些使用jdbc的年代了。那来看看现象吧。

 

场景:测试部用loadRunner往死里压,发现很多业务对象不断增长,但是按照业务场景来说,这些业务对象处理以后就自动释放了。(在本地的开发环境验证了是会自动释放的)

 

JProfiler截图:

 

       上图中可以看到有很多业务对象已经累积占用了不少内存,在让测试部同学停掉压力测试以后,等待了一会儿,然后用JProfiler主动发起垃圾回收,也看到了Jboss后台有GC回收的记录输出以后,发现这些对象依然存在,也就是说这些对象成为了Memory泄漏的诱因之一。但是就如我所说的,在本地测试以及白盒测试来看,这些对象在一次请求以后,处理完毕一定会被释放,没有被其他MapReference,然后通过JProfiler看了看这些对象的Allocation Call Tree

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Eclipse Memory Analyzer(简称MAT)是一款基于Eclipse的内存分析工具,主要用于分析Java应用程序的内存使用情况。下面是Eclipse Memory Analyzer的文教程。 1. 安装与配置:首先,我们需要下载并安装Eclipse Memory Analyzer。可以从官方网站或Eclipse Marketplace获取安装包。安装完成后,进入Eclipse,选择“Help” -> ”Eclipse Marketplace”,搜索并安装Memory Analyzer插件。安装完成后,重启Eclipse。 2. 导入和分析Dump文件:在Eclipse,选择“File” -> “Import”,然后选择“Memory Analysis”,点击“Next”。在这个页面,你可以选择要导入和分析的Heap Dump文件,Heap Dump是一个保存Java堆内存快照的文件,可以通过 JVM 参数 -XX:+HeapDumpOnOutOfMemoryError 或者 JMAP 工具生成。选择好文件后,点击“Finish”按钮。MAT将会对文件进行分析并展示相关信息。 3. 内存泄漏分析:在MAT,你可以使用“Leak Suspects”选项卡来查找可能的内存泄漏问题。点击“Leak Suspects”选项卡后,MAT会自动进行分析,并列出可能的内存泄漏问题。你可以点击其一个泄漏对象以查看详细信息,并根据分析结果进行修复。 4. 内存使用情况分析:通过“Histogram”选项卡,你可以查看Java应用程序各个类的内存使用情况。MAT将会显示每个类的实例数量、占用内存量等信息,方便你进行分析。你可以根据需要进行排序、过滤和搜索,以更好地了解内存使用情况。 5. 内存报告生成:MAT提供了生成内存报告的功能,方便你将分析结果保存和分享。在Eclipse,点击“File” -> “Export”,选择“Heap Dump”,然后点击“Next”。在这个页面,你可以选择要保存的文件路径和格式,点击“Finish”按钮即可生成报告。 这是关于Eclipse Memory Analyzer教程的简要介绍。通过上述步骤,你可以更好地使用MAT进行Java内存分析,发现和解决内存相关的问题。希望对你有所帮助!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值