当前位置: 首页 > 面试题库 >

PermGen内存不足的原因

和弘博
2023-03-14
问题内容

我在自己的环境中不断检测PermGen中的OOM:

  1. Java 6的
  2. jboss-4.2.3
  3. 网络应用程序不大

我知道String.intern()问题-但是我没有足够有价值的用法。MaxPermGen大小的增加并没有费力(从128 Mb到256 Mb)。

还有什么其他原因可以为PermGen调用OOM?在这种情况下(策略,工具等)哪种调查方案是最佳的?

谢谢你的帮助


问题答案:

看到这个笔记

  • 将JDBC驱动程序放在common / lib中(如tomcat文档所说),而不是放在WEB-INF / lib中
  • 不要将commons-logging放入WEB-INF / lib,因为tomcat已经对其进行了引导

新的类对象被放置到PermGen中,因此占据了越来越大的空间。不管您创建PermGen空间有多大,在进行足够的部署后,空间将不可避免地达到顶峰。您需要做的是采取措施冲洗PermGen,以便可以稳定其大小。有两个用于执行此清除操作的JVM标志:

-XX:+CMSPermGenSweepingEnabled

此设置将PermGen包括在垃圾收集运行中。默认情况下,PermGen空间永远不会包含在垃圾回收中(因此会无限制地增长)。

-XX:+CMSClassUnloadingEnabled

此设置告诉PermGen垃圾回收清除对类对象执行操作。默认情况下,即使在垃圾回收期间访问PermGen空间,类对象也会获得豁免。



 类似资料:
  • 问题基于Oracle Hotspot JDK8。 我想,当应用程序遇到异常时,可能有两个原因。 分配的JVM堆大小达到指定大小,GC系统无法挤出足够的空间。 分配的JVM堆没有到达,但是没有足够的物理内存使JVM堆增长。假设<. 我用@Eugene在Answer中提供的代码做了一些实验。正如@Holger所指出的,结果在不同的环境中有所不同。我使用Hotspot JDK8 x64在CentOS x

  • 我收到一个与permgen有关的内存不足错误。 这是我在setenv中的JAVA\u OPTS变量。sh。 导出JAVA_OPTS=“-Xms1g-Xmx2g-XX:MaxPermSize=2g” 如果我从intellij运行tomcat(使用相同的选项),它可以正常工作并且部署我的网络战争。运行 catalina.shjpda从命令行开始给我这个错误。 使用JRE\u HOME:/Library

  • 问题内容: 我使用io.Copy()复制文件,大约700Mb,但这会导致内存不足 错误信息如下: 我为buf分配了足够的内存,这导致bodyWriter.CreateFormFile()中的内存不足 问题答案: 这是因为您正在“复制”到,这是内存中的缓冲区,从而迫使Go尝试分配与整个文件一样大的内存块。 根据您的使用情况,您似乎正在尝试通过HTTP流式传输文件?在这种情况下,请勿将传递给,而是直接

  • 我正在努力解决古老的字谜问题。多亏了许多教程,我能够迭代一组字符串,递归地找到所有的排列,然后将它们与英语单词列表进行比较。我发现的问题是,在大约三个单词之后(通常是关于“变形”之类的东西),我会得到一个OutOfMemory错误。我试着把我的批分成小的集合,因为它似乎是消耗我所有内存的递归部分。但即使只是“变形”也把它锁起来了... 编辑:根据出色的反馈,我已经将生成器从排列更改为工作查找: 它

  • 问题内容: 我今天遇到一个奇怪的问题。对于其他人来说,这可能是一个简单的答案,但这让我感到困惑。为什么下面的代码会导致内存错误? 我得到了这两个错误之一…第一个是在节点的解释器中运行此代码时,第二个是通过nodeunit运行它时: 严重错误:CALL_AND_RETRY_2分配失败-内存不足 严重错误:JS分配失败-内存不足 问题答案: 当我尝试访问阵列时会发生这种情况。但是获取长度却没有。

  • 问题内容: 今天,我运行了用于文件系统索引编制的脚本,以刷新RAID文件索引,并在4小时后崩溃并出现以下错误: 服务器配备16GB RAM和24GB SSD交换。我非常怀疑我的脚本是否超过了36gb的内存。至少不应该 脚本使用文件元数据(修改日期,权限等,无大数据)创建存储为对象数组的文件索引 过去,我曾经用此脚本经历过奇怪的节点问题,这使我不得不这样做。在处理诸如String之类的大文件时,由于