【问题标题】:java.lang.OutOfMemoryError: PermGen space in embeded jettyjava.lang.OutOfMemoryError:嵌入式码头中的 PermGen 空间
【发布时间】:2013-12-29 03:44:49
【问题描述】:

我正在尝试在码头服务器中部署多个应用程序。目前我有 50 个申请,我正在关注这个答案 jetty server 9.1 multiple embeded ports and application in same server instance.

我在第 38 次部署时收到 java.lang.OutOfMemoryError: PermGen space。我该如何解决?

【问题讨论】:

标签: java eclipse jetty


【解决方案1】:

增加码头实例的 perm 和堆大小

http://pic.dhe.ibm.com/infocenter/chghelp/v5m3/topic/com.ibm.rational.change.install.doc/topics/ch_t_ig_change_java_max_heap_jty.html

当你通过命令行运行它时:

java -jar -XX:MaxPermSize=512m jety.jar 

如果这不起作用,请增加大小(例如 1024m)

【讨论】:

  • 我正在使用嵌入式码头服务器。它看起来像独立服务器。
  • 你是如何运行它的?通过 Maven?
  • 不使用我上面在我的问题中给出的链接
  • 那么您需要增加整个应用程序的大小。你如何运行你的应用程序?通过罐子?通过命令行?通过日食?
【解决方案2】:

部署会生成一堆Class 对象,这些对象分配在永久空间中,并且从未真正被垃圾回收。

要解决此问题,您可能希望使用 JVM 选项 -XX:MaxPermSize=128m 增加永久空间的大小(有关更多 JVM 选项/说明,请参阅 here)。

注意,从 Java8 开始,perm 空间一直是removed。因此,您也可以将 JDK 升级到 Java8。

【讨论】:

  • Hendrik,我没有重新部署,我有 50 个战争文件。我正在尝试在码头服务器中分解它。在部署本身时,出现此错误。第 38 次战争文件后我无法部署。
  • 任务管理器的javaw进程达到205MB,出现这个问题。
  • 所以要么使用 -XX:MaxPermSize 选项启动你的 Eclipse,要么将它添加到 Eclipse 中嵌入式码头服务器的运行配置的 VM 参数中。
  • 在运行配置中,我转到 (x)=Arguments 选项卡并写了 -XX:MaxPermSize=1024m 仍然没有变化。变量名错了吗?
  • -XX... 不是程序参数,而是 VM 参数。或许stackoverflow.com/questions/862391/… 对你有帮助。
【解决方案3】:

任何内存控制选项都是您为嵌入式 Jetty 应用程序启动的 JVM 的一部分。这意味着,为了增加 JVM 使用的 PermGen,您需要在启动嵌入式 Jetty 实例时对 JVM 使用命令行选项 -XX:MaxPermSize

例子:

$ java -XX:MaxPermSize=1024m -cp myserver.jar com.company.EmbeddedMe

由于您添加了 标签,我假设您想知道如何为同样的事情配置“运行配置”。

在运行 > 运行配置 > 参数选项卡 > VM 参数中,输入 -XX:MaxPermSize=1024m

【讨论】:

  • 哇.. 这很好用。我必须先设置大小,然后再调用罐子。非常感谢。
  • 加一个用于运行配置信息
猜你喜欢
  • 2011-09-04
  • 2012-07-31
  • 2016-06-07
  • 2013-08-02
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多