`

DWR内存泄漏

阅读更多

      最近一个月,我们维护的网站服务器出现内存泄漏,经过把应用系统功能分块进行排查(把不同功能布署到不同服务器上),最后发现问题集中在登录之后到显示服务中心首页这一块。经过对代码分析以及考虑到登录功能已经稳定运行很长时间,出现内存泄漏的可能性较小,所以重点检查打开办税服务中心首页时所执行的操作上。最近两个月服务中心首页所做最大的改动就是增加了一些提醒事项,而这些提醒功能都使用DWR来异步从服务器取得数据,这样的取数功能有10个左右。
      检查这些提醒功能的实现代码并未发现有明显的内存泄漏点存在,于是怀疑问题可能是由DWR引起的(DWR的版本是1.1.4)。
     通过检查DWR的源代码,发现在DWRServlet初始化时即把Request、Response、ServletContext等内容都放入WebContext缓存起来,而WebContext是用ThreadLocal来保存数据,当任务执行完毕线程终止后,ThreadLocal里保存的内容也被释放。而Weblogic是有线程池的,DWRServlet执行完成后线程并不中止,所以WebContext中的内容将无法被GC回收,因此造成内存泄漏。
     从DWR官网下载新版本(2.0.5),检查代码发现对此问题已经进行修正,在doGet和doPost时才把内容放入WebContext,在doGet和doPost执行完成后,主动释放WebContext的内容。这样应该可以避免由于缓存而造成的内存泄漏。于是用DWR2.0.5来替换DWR1.1.4,并对相关代码和配置文件做相应的修改,布署到生产机,应用系统功能正常,内存使用状况还需进一步观察。

分享到:
评论
1 楼 donsun 2010-10-11  

DWR1.1.4中已经包含了清楚ThreadLocal的方法,所以楼主所谓的内存泄漏与DWR无关。
        finally
        {
            if (builder != null)
            {
                builder.unset();
            }

            ServletLoggingOutput.unsetExecutionContext();
        }

相关推荐

    DWR内存兼容及无法调用问题解决方案

    在上次遇到DWR内存泄漏问题后根据网上的内容对JS文件进行修改,修改后发现还有一些兼容的问题,同时还出现不能调用的一些情况。 而且根据统计DWR就算内存泄漏,也不是特别严重,除非你一个浏览器跑几天不关闭,而且...

    dwr 实例(MyEclipse开发,包括dwr所用jar包)

    - **安全考虑**:由于DWR直接暴露了服务器端方法,因此需要注意安全问题,避免敏感信息泄露。 5. **DWR的应用场景** - **实时数据更新**:例如股票价格、天气预报等实时信息的展示。 - **表单验证**:在用户输入...

    DWR 2.0M3 学习笔记

    10. **最佳实践**:了解如何编写高效的DWR代码,避免内存泄漏,合理使用批处理,以及如何优化JavaScript和Java代码以提升整体性能。 阅读"DWR学习笔记.doc"文件将有助于系统地掌握这些知识点,通过实践操作加深理解...

    DWR.xml配置文件说明书(含源码)

    在访问量比较大的情况下,可以不用担心发生内存泄露的情况. 配置一个creator的创建和远程方法调用设置: ... 上面的配置信息表示将java.util.date提供给客户端调用,并且引用名称是Blash.当你在客户端调用...

    dwr实现服务器推技术,兼容低版本IE

    - 定期清理连接,防止内存泄漏。 综上所述,DWR提供了一种有效的途径,使得即使在低版本的IE浏览器中,也能实现服务器推送和页面无刷新的数据实时获取。理解并熟练掌握DWR的原理和应用,对于开发高效、实时的Web...

    dwr后台推送

    ScriptSession是DWR用于跟踪客户端会话的机制,但如果不正确地使用或管理,可能会导致内存泄漏或其他性能问题。这个文件中的讨论可能提供了如何避免这些问题的解决方案。 总的来说,DWR后台推送技术通过长连接或者...

    dwr实例及简单文档

    10. **最佳实践**:学习如何在实际项目中有效利用DWR,如合理设计接口、避免内存泄漏、优化数据传输等,这些都是提升应用性能的关键。 通过对这个压缩包的学习,你不仅可以掌握DWR的基本用法,还能深入理解Ajax技术...

    DWR开发步骤相关整理

    - 注意管理JavaScript内存,避免因过多的DWR调用导致内存泄漏。 - 使用AJAX调用时,确保考虑页面状态和用户交互,避免造成混乱。 理解并掌握以上DWR开发步骤,你就能有效地利用DWR创建高性能、互动性强的Web应用...

    java网页聊天室

    如使用线程池处理并发请求,避免内存泄漏,以及对用户输入进行验证和过滤,防止XSS、CSRF等攻击。 8. **数据库存储**:聊天记录通常需要持久化存储,以便用户可以查看历史消息。这涉及到数据库的设计和操作,包括...

    java和JavaScript开发细节

    同时,在处理事件解绑时也要小心,确保不会留下内存泄漏的风险。 2. **跨域会话安全:** 在使用DWR(Direct Web Remoting)框架时,可以通过配置`web.xml`中的`crossDomainSessionSecurity`参数来增强安全性。将该值...

    使用了2年Struts开发项目后的总结

    但是,要防止内存泄漏,需要正确管理ActionForm的生命周期,特别是在大型应用中,考虑使用Session范围之外的FormBean。 Ajax技术在Struts中也发挥了重要作用,通过DWR(Direct Web Remoting)或jQuery的Ajax库,...

    iOS开发之详谈属性设置readwrite、readonly、retain、copy、assign、nonatomic

    这通常用于非Objective-C对象(如C标量类型),以避免内存泄漏或循环引用问题。 3. `retain`:setter方法会释放旧值,并对新值执行retain操作,增加其引用计数。这样可以确保对象在赋值后不会立即被销毁。当一个...

Global site tag (gtag.js) - Google Analytics