[原创]解决内存泄露问题_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2362 | 回复: 0   主题: [原创]解决内存泄露问题        下一篇 
llei.zhang
注册用户
等级:中尉
经验:492
发帖:18
精华:0
注册:1970-1-1
状态:离线
发送短消息息给llei.zhang 加好友    发送短消息息给llei.zhang 发消息
发表于: IP:您无权察看 2015-5-13 15:02:04 | [全部帖] [楼主帖] 楼主

问题现象描述:
    经过观察发现JVM的heap快速增长,在经过一天的时间4000M的内存基本用光了,垃圾回收的效果不理想。在系统中查看JVM的线程,发现线程占用内存增长很快,达到物理内存的62%左右就会宕机。

问题分析:
内存泄露: 指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。

解决方案:
    这个很可能是web应用代码中的泄露,在经过开发人的确认后,证明确实是应用中使用了Hibernate3.0的连接池dbcp造成问题的根本原因。
内存泄露的问题困难在于:
                               1.编译器不能发现这些问题。
                               2.运行时才能捕获到这些错误,这些错误没有明显的症状,时隐时现。
                               3.对于手机等终端开发用户来说,尤为困难。

从下面三个方面来解决内存泄露。

     第一:良好的编码习惯,尽量在涉及内存的程序段,检测出内存泄露。当程式稳定之后,再来检测内存泄露时,无疑增加了排除的困难和复杂度。
     第二,在声明对象引用之前,明确内存对象的有效作用域。在一个函数内有效的内存对象,应该声明为 local 变量,与类实例生命周期相同的要声明为实例变量……以此类推。
     第三,在内存对象不再需要时,记得手动将其引用置空。


解决结果:
在开发人员修改代码以后,经过一天的观察JVM的heap没有再快速上涨,而且系统运行稳定,证明该问题确实是Hibernate3.0的连接池dbcp连接池引起的。



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论