关于Was内存溢出问题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于Was内存溢出问题

名称:Class类加载器内存泄漏问题的探讨.doc 日期: 01.02.2008 作者:Henry Hu 状态: Release 1 邮件:hupf@ 页数:  PAGE 26 of  NUMPAGES 26 关于Class类加载器 内存泄漏问题的探讨 胡鹏飞 2008-1-2 目录  TOC \o 1-3 \h \z \u   HYPERLINK \l _Toc187076375 背景  PAGEREF _Toc187076375 \h 1  HYPERLINK \l _Toc187076376 疑问:应用重启,导致内存泄漏?  PAGEREF _Toc187076376 \h 3  HYPERLINK \l _Toc187076377 问题的再现  PAGEREF _Toc187076377 \h 4  HYPERLINK \l _Toc187076378 JVM GC 垃圾回收机制概述  PAGEREF _Toc187076378 \h 7  HYPERLINK \l _Toc187076379 Class类加载的基本机理  PAGEREF _Toc187076379 \h 7  HYPERLINK \l _Toc187076380 JVM GC垃圾回收和ClassLoader类加载器之间的微妙关系  PAGEREF _Toc187076380 \h 9  HYPERLINK \l _Toc187076381 ClassLoader类加载内存泄漏问题的定位  PAGEREF _Toc187076381 \h 13  HYPERLINK \l _Toc187076382 ClassLoader类加载内存泄漏问题的解决方案  PAGEREF _Toc187076382 \h 19  HYPERLINK \l _Toc187076383 参考资料:  PAGEREF _Toc187076383 \h 24  背景 浪潮烟草技术人员针对广东烟草12月10日内存溢出事件进行了广泛的技术探讨,并得到了一些建设性的建议和结论。 其中重点提到了: “ 关于websphere在控制台中进行重启应用,而不是重启整个websphere,这时候静态类是不能回收的,造成些类不能销毁,占用着内存,而且这些内存是不能重复使用的,可以说是内存泄露。静态的类不能销毁,那么静态类引用的对象也不能销毁,因此一些bean都不能被正常回收,其实这些小对象占用内存是很少的,最主要的是这些类引用的缓存没有销毁,这些缓存才是占用内存的大头。如果系统用了一两天,然后有人在控制台上将这个应用重启,那么缓存将不能销毁,照成大量内存浪费,因此现在我们分析的dump文件中缓存一半的内存是由这些没有销毁的无用的缓存占用的。其实BSP中有个HttpServletContextListener,这个监听器能够在关闭应用的时候清空缓存,但是从dump文件中可以看出这个监听器可能没有在应用关闭的时候调用。 对于静态类支持有的对象销毁问题需要进行研究,解决Websphere的这种bug。 ” 所以大家认为是WAS的Bug导致:在进行应用重新启动过程中,一些类的Class MetatData本身描述不能从内存中被释放,同时在LouShang烟草系统中一些系统类型的类Class进行了大量类静态变量的定义,并在这些类静态变量中存放了大量的对象。长此以往,多次重新启动应用从而大量的内存被占用,最终导致内存泄漏。 针对Java静态类的补充说明:通常一个普通类不允许声明为静态的,只有一个内部类才可以。在一个内部类中如果想提供静态方法访问的前提下,我们才会把此内部类设置为静态类。这时不需实例一个外部类和内部类,而可以直接调用内部内的静态方法。样例如下: package com.test; public class StaticCls { public static void main(String[] args) { OuterCls.InnerCls.test(); } } class OuterCls { public static class InnerCls { public static void test() { System.out.println(InnerCls); } } } 相信在LouShang烟草系统中这种静态类的应用场景并不多见,所以上面提到的静态类的说法并不准确,应该改正为:类静态变量。 虽然把“静态类”改变为“类静态变量”,但是上面提到的Class MetatData类本身描述不能从内存中

文档评论(0)

153****9595 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档