permgen

在我的最新文章中,我解释了可能导致java.lang.OutOfMemoryError:PermGen空间崩溃的原因 现在该讨论该问题的可能解决方案了。 或更确切地说,是关于互联网对可能解决方案的建议。 不幸的是,我只能说,当我通过关于该主题的不同“专家意见”时,来自MythBusters的内心Jamie Hyneman正在唤醒。

我搜索了有关解决java.lang.OutOfMemoryError:PermGen空间崩溃的方法的当前常识,并浏览了许多页面,这些页面似乎更适合Google结果。 幸运的是,大多数建议已经被提炼为备受推崇的StackOverflow的主题 。 如您所见,该主题非常受欢迎,并获得了一些颇受好评的答案。 但是具有讽刺意味的是,整个主题包含的零解决方案我可以向我推荐。 好吧,除了“查找内存泄漏的原因”外,这当然是绝对正确的,但对回答“如何解决内存泄漏”的问题不是很有帮助。 让我们回顾一下SO页面上提出的建议。

使用-XX:MaxPermSize = XXXM

导致java.lang.OutOfMemoryError的原因有两个:PermGen空间错误。

一种是应用程序服务器和/或应用程序确实确实使用了太多的类,以致它们不适合默认大小的永久代。 绝对有可能,但实际上并非如此。 在这种情况下,增加永久代的大小确实可以节省一天。 如果您唯一的问题是如何在太多的小房子里放太多家具,那就买更大的房子!

但是,如果您的爱心妈妈每周给您寄去新家具怎么办? 您可能无法一遍又一遍地搬到更大的房子。 正如我在上面提到的上一篇文章中所描述的,这正是内存泄漏以及类加载器泄漏的情况。 在此让我清楚:永久代大小的增加不会使您免于类加载器泄漏。 它只能推迟。 并更难预测服务器将淘汰多少次重新部署。

-XX:+ CMSPermGenSweepingEnabled

关于StackOverflow的最流行的答案是将这些选项添加到服务器的命令行中。 而且,他们说:“也可以添加-XX:+ UseConcMarkSweepGC。 只是要确定”。 这些JVM标志的第一个问题是没有关于它们真正作用的解释。 无论是在SO答案中(我都不喜欢告诉您在没有理由的情况下要做某事的答案),还是在整个Internet中都是如此。

确实,除了此页面之外,我找不到有关这些选项的任何文档。 但是,实际上,这甚至没有关系。 绝不会对垃圾收集器选项进行任何修补,以防在班机泄漏时发生。 因为按照定义, 内存泄漏是GC不足的情况。 如果从服务器的类加载器中的某个地方到应用程序的对象或类之间存在有效的实时硬引用,则GC永远不会将其视为垃圾,也永远不会对其进行回收。 当然,所有这些JVM标志看起来都很聪明和神奇。 在某些情况下可能确实需要它们 但是它们肯定还不够 ,不能解决您的永久代泄漏。

使用JRockit

下一个建议是切换到JRockit JVM。 理由是,由于JRockit没有永久代,因此无法用完它。 当然,这是一个有趣的主张。 不幸的是,它也不能解决我们的问题。

此“解决方案”的唯一结果将是获取java.lang.OutOfMemoryError:Java堆空间,而不是java.lang.OutOfMemoryError:PermGen空间。 在没有单独生成类定义的情况下,JRockit将通常的Java堆空间用于它们。 而且,只要泄漏的根本原因无法解决,只要有足够的时间,这些类定义就可以填满最大的堆。

重新启动服务器

假装问题已解决的另一种方法是不时重新启动应用程序服务器。 例如,无需重新部署应用程序,只需重新启动整个服务器即可。 但是,当您第一次看到部署了多个应用程序的应用程序服务器时,您会知道在生产环境中几乎不可能做到这一点。 这并不是真正的解决方案。 这是将您的头藏在沙子里的一种方法。

使用Tomcat

实际上,这并不是以前的绝望之作-最近的Tomcat版本确实尝试解决类加载器泄漏。 自己看看他们的文档 。 如果您可以将Tomcat用作目标服务器,并且如果您的泄漏是Tomcat可以成功应对的泄漏之一,那么也许,也许您很幸运,问题就为您解决了。

在此处使用<您最喜欢的探查器工具>

也可能是可行的解决方案。 但是,再加上几个IF 。 首先,您应该能够在受影响的环境中使用该探查器。 正如我之前在其他文章中提到的那样, 探查器施加的开销水平在(生产)环境中可能是不可接受的。 其次,您必须知道如何使用探查器提取所需的信息并确定泄漏的位置。 而我十多年的经验表明,这种情况很少发生。

结论

到目前为止,我们还没有看到java.lang.OutOfMemoryError:PermGen空间错误的任何确定解决方案。 在某些情况下,有些方法是可行的。 但是,令我震惊的是,大多数建议完全是无效的 ! 您可能会浪费数天或数周的时间来尝试它们,甚至没有开始解决真正的问题:找到流氓的根本原因,以防泄漏!

幸运的是,从1.1版本开始, Plumbr还发现了PermGen泄漏 。 它告诉您阻止类加载器被释放的根本原因,从而节省了寻找漏洞的时间。 因此,下一次,当面对java.lang.OutOfMemoryError:PermGen空间消息时, 下载Plumbr并永久摆脱该问题。

参考: Plumbr博客博客上来自JCG合作伙伴 Nikita Salnikov Tarnovski的《 破坏PermGen神话》 。

翻译自: https://www.javacodegeeks.com/2012/12/busting-permgen-myths.html

permgen

permgen_打破PermGen神话相关推荐

  1. 打破PermGen神话

    在我的最新文章中,我解释了可能导致java.lang.OutOfMemoryError:PermGen空间崩溃的原因 . 现在该讨论该问题的可能解决方案了. 或者,更确切地说,是关于互联网对可能解决方 ...

  2. CEO 赠书 | 打破创新神话,揭示创新本质

    弱者群居,于是有了芸芸众生 强者求变,方才见证出类拔萃 相比勤奋,更重要的是深度思考的能力 它藏着你走过的路,读过的书 本期荐书 <创新的神话> 豆瓣评分:8.4 作者简介 斯科特•伯尔昆 ...

  3. 打破富不过三代神话 荣智健中兴百年家业

    11月5日,福布斯中文版公布了"2004中国富豪榜".荣智健家族以控股中信泰富集团14.9亿美元的资产而荣登榜首.荣氏家族是中国近代史上跨世纪的商业王朝,荣智健的爷爷荣德生是中国棉 ...

  4. 事实还是虚构?关于软件编程的 8 个神话

    维卡什·库马尔 Vikash Kumar 在软件外包公司 Tatvasoft.com 担任经理.有时他在管理活动时确实有空闲时间,在此期间他喜欢撰写和探索新的技术趋势和主题.Vikash 还在主要平台 ...

  5. CEO 赠书 | 讲述创新背后不为人知的故事,改变世界的 Ta 们做对了什么?

    弱者群居,于是有了芸芸众生 强者求变,方才见证出类拔萃 相比勤奋,更重要的是深度思考的能力 它藏着你走过的路,读过的书 本期荐书 <创新者> 豆瓣评分:8.5 作者简介 沃尔特·艾萨克森毕 ...

  6. 盘它:1200 天积淀,超 750 篇干货,为你甄选这 100 + 篇精华!

    网红企业「每日一淘」,精细化运营效果提升 10 倍的幕后故事 愿 2020 的你们 只争朝夕,不负韶华,以梦为马,向光而行 神策数据公众号,至今已经陪伴你们 1200 天,推送了 750+ 篇好文,相 ...

  7. CEO 赠书 | 当我们谈企业文化时,我们在谈什么?

    弱者群居,于是有了芸芸众生 强者求变,方才见证出类拔萃 相比勤奋,更重要的是深度思考的能力 它藏着你走过的路,读过的书 本期荐书 <奈飞文化手册> 豆瓣评分:8.1 作者简介 帕蒂·麦考德 ...

  8. CEO 赠书 | 甲之蜜糖乙之砒霜,创新者也将成为守旧者

    弱者群居,于是有了芸芸众生 强者求变,方才见证出类拔萃 相比勤奋,更重要的是深度思考的能力 它藏着你走过的路,读过的书 本期荐书 <创新者的窘境> 豆瓣评分:8.5 作者简介 克莱顿•克里 ...

  9. 各linux版本比较

    来源:http://moccafe.blog.hexun.com/29956237_d.html 对Unix各大发行版本的总结 (CentOS, Debian, Redhat, Fedora Core ...

最新文章

  1. android sdk软件开发套件,ANDROIDSDK-SITARA
  2. 2014.5.2—北京爱情故事
  3. Java的ArrayList集合_JAVA之ArrayList集合
  4. mysql5.6错误代码
  5. 2021高考成绩查询内蒙时间,2021内蒙古高考成绩什么时候几点可以查
  6. 前端学习(2231):react条件渲染之列表渲染
  7. arraylist扩容是创建新数组吗 java_arraylist扩容机制要怎么实现?arraylist怎么扩容...
  8. 35款非常有创意的透明名片设计作品
  9. linux文件服务器迁移方案,服务器之间文件备份方案、如何把服务器文件自动备份到另外一台服务器?...
  10. linux shell 递归统计代码行数
  11. python源码深度剖析_Python 源码深度剖析
  12. usb启动计算机boss设置方法,技嘉主板bios设置usb启动(图文教程)
  13. ae计算机内存不足,解决电脑内存不足的解决方法|电脑内存不足怎么办
  14. Linux 安装php-cs-fixer
  15. 开发STM32MP1,离不开一个好开发板
  16. 电脑变WIFI:建立虚拟共享WIFI热点可查看WIFI密码windows中使用bat批处理命令提示符cmd创建教程含工具
  17. Ubuntu添加新的中文字体
  18. 2019FME博客大赛——【零编码】利用FME实现城市高德路况抓取及增量更新——以深圳为例
  19. 【网页支付】支付宝内置浏览器调用支付功能
  20. h5应用数据加密_H5+应用打包JS没有加密混淆

热门文章

  1. 解决Html5用canvas绘制不出来图片的问题
  2. Java IO: 其他字符流(下)
  3. Java经典面试题一
  4. 01)自学JavaScript
  5. sqlserver建库建表建约束,删库删表删约束的示例总结
  6. 在dialog中使用EditText键盘弹不起来的解决方法
  7. ‘entityManagerFactory‘ that could not be found
  8. dplayer js控制 自动全屏_vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】...
  9. foreach 循环详解
  10. Comparable and Comparator API