打破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 。 首先,您应该能够在受影响的环境中使用该探查器。 正如我之前在其他文章中提到的那样, 探查器施加的开销水平在(生产)环境中可能是不可接受的。 其次,您必须知道如何使用探查器提取所需的信息并确定泄漏的位置。 而我10多年的经验表明,这种情况很少发生。

结论

到目前为止,我们还没有看到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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 弹出弹框2秒消失_基于HTML5 Canvas 实现弹出框

前言用户鼠标移入时&#xff0c;有弹出框出现&#xff0c;这样的需求很常见。这在处理 HTML 元素实现时简单&#xff0c;但是如果是对 HTML5 Canvas 构成的图形进行处理&#xff0c;这种方法不再适用&#xff0c;因为 Canvas 使用的是另外一套机制&#xff0c;无论在 Canvas 上…

【CSS】小妙招,各种问题总结方法处理

1.实现div文字溢出自动省略号截取 overflow:hidden; /*超过部分不显示*/       text-overflow:ellipsis; /*超过部分用点点表示*/       white-space:nowrap;/*不换行*/ 2.规定行数的截取效果 text-overflow: ellipsis; /*有些示例里需要定义该属性&#xff0c…

Java2Days 2012:Java EE

Java2Days会议是东欧的主要活动&#xff0c;目的是介绍Java开发的最新趋势。 今年&#xff0c;该活动于10月25日至26日在保加利亚的索非亚举行。 我在那里&#xff0c;并有机会与一些SAP的同事一起品尝了一些最新的Java&#xff0c;云和移动内容&#xff0c;这些内容已直接发送…

c++ 优先队列_C/C++数据结构:队列结构最全解析!带你零基础入门队列结构

前言上一章节针对于C语言栈结构做了解析&#xff0c;不清楚的可以回顾一下。本章节主要针对于C语言的基础数据结构队列做以解析。数据结构之队列队列是一种特殊的 线性表 &#xff0c;特殊之处在于它只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在…

周期均方根和有效值的区别_黑猪肉和白猪肉有啥区别?

为啥散养黑猪肉的价格要比白猪贵很多?这其中的原因不看不知道!市面上的散养黑猪肉通常要比白猪肉贵很多&#xff0c;但是仍有不少人喜欢买黑猪肉回家吃&#xff0c;散养黑猪肉和白猪肉不仅仅是口感上有所差距&#xff0c;其价值差距体现在很多方面&#xff0c;接下来小编就和大…

测试环境搭建流程_前端构建 DevOps 搭建 DevOps 基础平台(中)

前言搭建基础平台搭建上篇的时候的时候&#xff0c;已经介绍过了项目流程设计、数据库搭建、jwt 登录等模块。此篇我们介绍分支管理设计及其他的基础模块。后端模块DevOps - Gitlab Api使用(已完成&#xff0c;点击跳转)DevOps - 搭建 DevOps 基础平台(已完成 50%)基础平台搭建…

什么是PermGen泄漏?

接下来是对Java应用程序中特定类型的内存问题的实用介绍。 即–我们将分析导致java.lang.OutOfMemoryError&#xff1a;PermGen空间的错误 堆栈跟踪中的症状。 首先&#xff0c;我们将介绍理解该主题所需的核心概念&#xff0c;并说明什么是对象&#xff0c;类&#xff0c;类…

rto净化效率计算公式_全面剖析 石油化工行业RTO蓄热式焚烧炉的优势要素

在我国的国民经济发展中&#xff0c;石油化工产业是重要的能源基础工业&#xff0c;但是废气的治理问题一直困扰着许多企业。直到RTO蓄热式焚烧炉的面世&#xff0c;为石油化工行业的废气治理带来了新希望。如今&#xff0c;有机废气治理工作越来越受到广泛重视&#xff0c;传统…

python作业:高级FTP程序

要求&#xff1a; 用户加密认证允许同时多用户登录每个用户有自己的家目录 &#xff0c;且只能访问自己的家目录对用户进行磁盘配额&#xff0c;每个用户的可用空间不同允许用户在ftp server上随意切换目录允许用户查看当前目录下文件允许上传和下载文件&#xff0c;保证文件一…

webpack学习笔记 (一)

一、安装nodejs&#xff1b; 点击打开nodejs官方站点&#xff1b; 点击下图框住的按钮&#xff0c;下周nodejs安装包&#xff1b; 安装下载好的安装包。 安装完毕之后&#xff0c;在cmd中输入node -v查看是否已经安装成功 如果有版本号显示&#xff0c;则代表安装成功&#xf…

将涡轮增压器添加到JEE Apps

我扮演的关键角色之一是在本地社区中传播Akka。 作为讨论的一部分&#xff0c;人们通常会想到的问题/疑问是Akka如何针对编写良好的Java / JEE应用程序提供更好的可伸缩性和并发性。 由于底层硬件/ JVM保持不变&#xff0c;因此参与者模型如何比传统的JEE应用程序发挥更多的功…

MapReduce的工作原理

一、MapReduce模型框架 MapReduce是一个用于大规模数据处理的分布式计算模型&#xff0c;最初由Google工程师设计并实现的&#xff0c;Google已经将完整的MapReduce论文公开发布了。其中的定义是&#xff0c;MapReduce是一个编程模型&#xff0c;是一个用于处理和生成大规模数据…

react实现多行文本超出加省略号

http://www.css88.com/archives/5206 overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; 根据该文章方法&#xff0c;放在react项目中发现并不能实现&#xff0c;仔细观察发现原来react解析出来的css样…

qq群 html,我的群组-普通群组.html

&#xfeff;我的群组&#xff0d;普通群组$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resou…

查看PLC IP 端口_西门子828D数控系统X130接口通讯怪异现象(X130手动设置的 IP)...

西门子828D数控系统&#xff0c;调试PLC过程中遇到网络通信怪异问题(不能直连非要加个路由器)&#xff0c;笔记本电脑的以太网网络直接连接显示网络电缆被拔出&#xff0c;如下图所示&#xff1a;奇怪&#xff0c;怎么出现这种情况了呢&#xff0c;因为我用这台电脑调试过别的P…

bzoj1263

贪心 n%31 分出一个4&#xff0c;其余用3&#xff0c;n%32&#xff0c;分出一个2&#xff0c;其余用3&#xff0c;然后高精度就行了 #include<bits/stdc.h> using namespace std; const int N 5005; struct BigInt {int len;int a[N];BigInt() { memset(a, 0, sizeof(a)…

c语言volatile_[技术]为什么单片机C语言编程时某一变量有时乱码

最近一个项目里面&#xff0c;在KEIL中用C语言在单片机里面定义了一个状态机全局变量&#xff0c;这个变量随时会改变&#xff0c;用于切换触摸屏的界面&#xff0c;可是程序运行中出现了一个问题&#xff0c;这个状态机号总是出现了被莫名奇妙改变的问题&#xff0c;导致触屏不…

微型计算机2017年9月上,2017年9月计算机一级考试WPS Office冲刺题

2017年9月计算机一级考试WPS Office冲刺题2017年下半年计算机一级考试将在9月份进行&#xff0c;为了方便考生备考计算机一级考试。下面是小编为大家带来的计算机一级考试WPS Office冲刺题&#xff0c;欢迎阅读。冲刺题一&#xff1a;1、PowerPoint 演示文稿和模板的扩展名是【…

11尺寸长宽 iphone_弱电工程LED显示屏尺寸规格及计算方法

前言&#xff1a;led屏幕在生活中&#xff0c;随处可见&#xff0c;显示屏、广播屏等等&#xff0c;但是led尺寸怎么计算的&#xff0c;你知道吗&#xff1f;今天我们一起了解一下led屏幕尺寸的计算方法。正文&#xff1a;一、点间距的计算1、各单元板常见型号及尺寸LED屏普遍是…

marquee标签的使用

<!DOCTYPE html> <html> <head><meta charset"utf-8" /><title>演示marquee</title><style type"text/css">*{padding: 0px;margin: 0px;}marquee{border: 1px solid purple;}img{width: 360px;height: auto;}&…