【问题标题】:Maven "Exception in thread "http-bio-8080-exec-32" java.lang.OutOfMemoryError: PermGen space"Maven“线程中的异常”http-bio-8080-exec-32”java.lang.OutOfMemoryError:PermGen 空间”
【发布时间】:2012-06-12 14:03:15
【问题描述】:

我在 Ubuntu 11.10 下使用 Struts2 + Spring 和 Hibernate 框架在 NetBeans 中创建了一个项目。第一次运行没问题,但是当我第二次或第三次运行它时,我不断收到这个异常。没有 Maven 一切顺利。我用apt-get install 安装了maven,是的,我在usr/bin/mvn 中添加了这一行export MAVEN_OPTS=-Xmx512m,但没有运气。如何从中获得更好的性能?

【问题讨论】:

  • 您是从 netbeans 内部运行项目还是从命令行使用 maven 启动它?
  • 我从 Netbeans 运行它

标签: java maven netbeans permgen


【解决方案1】:

你应该添加这一行:

export MAVEN_OPTS="-Xmx512M -XX:MaxPermSize=512M" 

请注意,一些用户报告双引号会产生问题,因此您可能希望使用:

export MAVEN_OPTS=-Xmx512M -XX:MaxPermSize=512M 

编辑:

因为你使用的是 Tomcat,所以使用这个:

  1. 打开tomcat/bin/catalina.sh
  2. 将此行添加到 JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX :PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC"
  3. 保存退出,重启Tomcat

More information here...

【讨论】:

  • 它没有帮助,第二次运行时同样的 OutOfMemory
  • @DenisHoss 由于您使用的是tomcat,请参阅我的更新答案。
  • 好的,这是一个解决方案,但时间不长,在第 7 次运行时我有同样的异常。我分析了我的应用程序并没有发现 Java 泄漏,那么问题出在哪里? maven就是这么善变吗?
  • @DenisHoss 好的,将 PermSize 和 MaxPermsize 都更改为 512m,然后重新启动(它们是 256m atm)。
  • 好的,我做到了,我看看现在怎么样,然后回来回答
【解决方案2】:

当对象没有正确清理它们的内存时,permgen space 通常会抛出这个错误。通常是“孤岛”的原因,它是引用仍然指向它们的对象,但是作为程序员的您无权访问这些引用,因为它们位于您的空间之外。您可能正在使用导致此问题的库,并且在您停止使用该库之前它可能不会消失。至于哪个图书馆,我不确定,有很多文章解释如何找到它,但这是一件苦差事,可能需要一段时间,除非你很幸运。内存分析器可以提供一些想法。

good explanation article

【讨论】:

  • 我的项目只有struts、spring、hibernate依赖和2个jsp的:),这是一个测试项目
  • 那么它将是其中之一,可能是您使用静态引用调用它们的类/方法之一。它通常发生在从服务器重新加载它时,我不久前用 log4net 得到它,不得不停止使用我正在调用的静态调用来停止它。这是我发现的 java 中最烦人和最难发现的错误之一,对于一个测试项目,我不会浪费时间去寻找原因,如果它是一个生产项目,你将不得不更新你的软件可能会导致问题跨度>
  • 这不是 Maven 问题。无论如何都要调查一下。一种不让它发生的方法是在添加新的 .war 文件之前简单地删除你的 .war 文件,因为这样引用应该在 99% 的时间从你的服务器中删除......如果你尝试直接更新你可能会更多地遇到这个问题。
【解决方案3】:

-Xmx512m 不会帮助你,因为你正在增加堆空间。您用完了 PermGen 空间,而不是堆空间。

尝试增加 PermGen 空间并放置一些标志以使其成为垃圾。这里有更多信息:Recurring "PermGen" in Tomcat 6

【讨论】:

    猜你喜欢
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2015-11-28
    • 2011-03-07
    • 2016-03-07
    • 2013-09-01
    相关资源
    最近更新 更多