问题标签 [permgen]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
335 浏览

tomcat - 将库添加到 Java Web 应用程序会导致 java.lang.OutOfMemoryError: PermGen space?

当我尝试将库(在本例中为:iText-2.0.8.jar)添加到我的 Java Web 应用程序(JSF)并重新启动 Tomcat 时,一切似乎都很好。登录页面也会呈现。然而,当我登录时,应用程序几乎立即抛出了臭名昭著的java.lang.OutOfMemoryError: PermGen space错误。

增加 PermGen 大小-XX:MaxPermGen=128M并不能解决问题,即使是像 2048m 这样的大容量也不能解决问题。当我删除添加的罐子时,一切都很好。

有谁知道如何诊断这个问题?

0 投票
1 回答
835 浏览

java - 确定 PermGen 空间中单个 Java 类定义的大小?

如何确定单个特定类定义(不是实例化对象)有多大?具体来说,给定类使用多少 PermGen 内存?如果无法计算,它与未压缩的 .class 文件的文件系统大小大致对应多少?

我读过Jon Masamitsu,关于 PermGen 的观点:

  • Java 类的基本字段
  • 类的方法(包括字节码)
  • 类的名称(以指向字符串的对象的形式,也在永久代中)
  • 常量池信息(从类文件中读取的数据,所有详细信息请参见 JVM 规范的第 4 章)。
  • 与类关联的对象数组和类型数组(例如,包含对方法的引用的对象数组)。
  • JVM 创建的内部对象(例如 java/lang/Object 或 java/lang/exception)
  • 编译器 (JIT) 用于优化的信息

最后两个可能与单个类定义无关。我对其余的感兴趣。

我发现的唯一可能的近似值是java.lang.instrument.Instrument.getObjectSize(myObject.getClass()); 但是描述中的“部分或全部”让我对准确性缺乏信心。有任何想法吗?我觉得我忽略了一些简单的事情。

0 投票
2 回答
1736 浏览

java - 在使用 Jetty 7 重新部署时解决 PermGen 问题

经过几天的调试,我成功地在 Tomcat 6.0.32 上成功地重新部署了一个中型到大型的 Web 应用程序,没有任何PermGen泄漏。我看到PermGen它填充后的下降,并且类加载器被垃圾收集。

在欣喜若狂之后,我尝试让应用程序重新部署而不会在我们的开发环境中泄漏,该开发环境由 Maven 和 Jetty 插件组成。

不幸的是,我似乎遇到了服务器限制,如下面的截图所示

Yourkit 快照 http://img811.imageshack.us/img811/7320/jettyclassloaderbeanelr.png

Jetty 请求线程对 a 有很强的引用,BeanElResolver而后者又对我的 webapp 中的多个类有很强的引用。

我没有找到有关如何刷新此信息的参考。

如何PermGen从我的应用程序中删除这个最终泄漏?


更新:

我已完成以下操作来解决问题,但没有运气:

  • 更新到最新版本的 Jetty 插件(7.4.5 和 8.0.0.M3)
  • 使用 CMS 收集器:-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled

更新 2:

0 投票
6 回答
16258 浏览

memory-leaks - Jetty 7:OutOfMemoryError:应用程序重新部署时的 PermGen 空间

第一次应用程序正确启动。然后我删除 webapp/*.war 文件并粘贴新版本的 *.war。Jetty 开始部署新战争但java.lang.OutOfMemoryError: PermGen space发生错误。如何配置 Jetty 以修复错误/进行正确的重新部署?

这个解决方案对我没有帮助。
码头版本:jetty-7.4.3.v20110701

0 投票
1 回答
271 浏览

scala - Scala 类定义对 perm gen 空间的影响

Scala 类库中使用的标准模式是在类和特征中定义类。并且大多数父类对象的操作都会导致这些内部类的对象被创建。每个对象的每个内部类都是不同的。

例如,查看 scala.io.Source 和 LineIterator 的源代码。我认为这是标准库中最简单的一个。

正如以下文件所建议的那样,有两个不同的类。

这意味着创建了两个类。

由于整个集合库都使用相同的模式,对于长时间运行的进程,对 permgen 空间有什么影响?

0 投票
2 回答
2729 浏览

tomcat - Intellij / Grails 开发要设置什么来避免 PermGen 错误?

我正在使用 IntelliJ 开发 Grails 应用程序,但是随着我们的应用程序的增长,我在使用 Tomcat 插件时遇到了 Permgen 错误。我已经尝试了几种设置 permgen 大小的组合,但它们似乎没有任何效果。

处理这些 Permgen 错误的任何解决方案?

0 投票
1 回答
315 浏览

coldfusion - Coldfusion TemplateClassLoader 是否保留类加载器实例?

我的 CF 8 服务器上出现“OutOfMemoryError: PermGen space”错误。在我的应用程序中,1000 个模板被加载到同一个局部变量中(用于测试目的),因此一旦加载了下一个模板,前一个模板应该可用于 GC - 但这不会发生。我得到了一个内存转储,并用 jhat 查看了它。我看到的是它加载了数千个模板,每个模板都有自己的 TemplateClassLoader 实例。在 TemplateClassLoader 中,它自身有一个对所有 TemplateClassLoader 实例的静态引用(同样来自 jhat)。可能正因为如此,实例都保存在内存中,所以类对象在 permgen 中不能被 GC。

仅当我在加载模板中调用 cfscript 函数时才会发生这种“占用内存”。如果我只是加载模板而不调用函数,则类对象被 GC 处理并且不会发生 OOM 错误。

知道 TemplateClassLoader 上的(出现的)静态引用发生了什么吗?

0 投票
1 回答
1525 浏览

java - 使用多个类加载器节省 PermGen 空间

我们正在用 Scala 编写一个带有很多类的大型 GUI 应用程序,我们不得不增加 PermGen 空间才能加载所有类。该应用程序本身显示了一系列基于屏幕的活动,每个活动都加载自己的大量类。在任何时间点都只加载/显示一个活动。在经历了一些活动之后,我们OutOfMemoryError在 PermGen 空间有了一个。

我知道 PermGen 空间就像堆的其余部分一样被垃圾收集,但我很想看看我是否可以通过每个活动一个来减少所需的 PermGen 空间,ClassLoader以便允许类卸载。

所以:

  1. 我知道系统 ClassLoader 加载的类无法卸载,因为它们的类加载器将永远引用它们。真的吗?
  2. 如果我的自定义类加载器加载的类的实例不再存在,并且类加载器可以被垃圾收集,它的类是否会被卸载,从而释放 PermGen 空间?
  3. 是否有任何关于(或会阻止)类卸载的警告?
0 投票
1 回答
3688 浏览

java - perm gen什么时候收集?

我在使用 CMS 收集器和内存条来触发 GC 的 Tomcat 应用程序上工作。当我重新加载 webapps 时,我有时会遇到这样的情况,即老一代已满足以触发 GC,但没有收集到死掉的类加载器。

我读到 Classes 被分配到 perm gen 中,并猜测它们因此被 Old gen 集合忽略了。我编写了以下测试类来测试这个理论。

我运行这个类并使用 VisualVM 监视输出,发现确实发生了多个 Old 和 Young gen 集合,而没有收集到死的 Classloader,因此大字节数组保留在内存中。

VisualVM 视觉 GC

什么会触发 Perm Gen 被收集?

0 投票
1 回答
856 浏览

memory - 如何为从NB开始的NetBeans插件增加vm内存

我找不到有关如何操作的信息。增加 NetBeans 本身的内存设置是/Applications/NetBeans/NetBeans 7.0.1.app/Contents/Resources/NetBeans/etc/netbeans.conf在我的 Mac 上更新的问题。

但是,我想增加从 NetBeans 运行插件时启动的 vm 进程的内存设置。在不影响内存的情况下,我在使用 UI 时遇到了 java.lang.OutOfMemoryError: PermGen space in about 30 secs。这种情况只发生在我的 Mac 上,在 Windows 7 上我没有这个问题 :)

我的平台是:java 版本“1.6.0_26”Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425) Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, 混合模式) MacOs 10.6.8 NetBeans 7.0.1

我很感激任何帮助!