首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.OutOfMemoryError: play框架中的PermGen空间

java.lang.OutOfMemoryError: play框架中的PermGen空间
EN

Stack Overflow用户
提问于 2014-02-08 22:43:59
回答 5查看 9.5K关注 0票数 8

编辑:- play ~run以运行我的项目

如何解决这个问题,我的项目正在测试阶段。每天5-6小时后,它会突然停止,并给出以下错误。如何删除此错误?

我正在用Scala2.1和playframework 2.2开发这个项目

代码语言:javascript
复制
    java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
    at java.util.concurrent.FutureTask.report(FutureTask.java:122)
    at java.util.concurrent.FutureTask.get(FutureTask.java:188)
Caused by: java.lang.OutOfMemoryError: PermGen space
    at sun.misc.Unsafe.defineClass(Native Method)
    at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:63)
    at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399)
    at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:396)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:395)
    at sun.reflect.MethodAccessorGenerator.generateSerializationConstructor(MethodAccessorGenerator.java:113)
    at sun.reflect.ReflectionFactory.newConstructorForSerialization(ReflectionFactory.java:331)
    at java.io.ObjectStreamClass.getSerializableConstructor(ObjectStreamClass.java:1376)
    at java.io.ObjectStreamClass.access$1500(ObjectStreamClass.java:72)
    at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:493)
    at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:468)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:468)
    at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:365)
    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:602)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1622)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1706)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1344)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
[error] Total time: 11065 s, completed 8 Feb, 2014 6:12:52 PM
1. Waiting for source changes... (press enter to interrupt)

java.lang.OutOfMemoryError: PermGen space
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) java.lang.reflect.InvocationTargetException
[error] Total time: 4 s, completed 8 Feb, 2014 6:12:57 PM
2. Waiting for source changes... (press enter to interrupt)

java.lang.OutOfMemoryError: PermGen space
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) java.lang.reflect.InvocationTargetException
[error] Total time: 4 s, completed 8 Feb, 2014 6:13:08 PM
3. Waiting for source changes... (press enter to interrupt)

java.lang.OutOfMemoryError: PermGen space
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) java.lang.reflect.InvocationTargetException
[error] Total time: 6 s, completed 8 Feb, 2014 6:13:54 PM
4. Waiting for source changes... (press enter to interrupt)
[error] Expected letter
[error] Expected symbol
[error] Expected '!'
[error] Expected '+'
[error] Expected '++'
[error] Expected ';'
[error] Expected end of input.
[error] Expected 'show'
[error] Expected '*'
[error] Expected '{'
[error] Expected project ID
[error] Expected configuration
[error] Expected key
[error] 9000
[error] ^
sbt appears to be exiting abnormally.
  The log file for this session is at /tmp/sbt7580663022166474466.log
java.lang.OutOfMemoryError: PermGen space
Error during sbt execution: java.lang.OutOfMemoryError: PermGen space
Exception in thread "Thread-125" java.lang.OutOfMemoryError: PermGen space
EN

回答 5

Stack Overflow用户

发布于 2014-06-13 23:54:02

我也遇到了同样的问题,所以我导出了SBT_OPTS,如下所示:

代码语言:javascript
复制
export SBT_OPTS="-XX:+CMSClassUnloadingEnabled -XX:PermSize=512M -XX:MaxPermSize=1024M"
票数 9
EN

Stack Overflow用户

发布于 2014-02-08 22:55:40

一般来说,这意味着你没有给你的JVM提供足够的内存,或者你有内存泄漏。看看人们是如何解决这些问题的:Dealing with "java.lang.OutOfMemoryError: PermGen space" error或搜索非播放特定的错误:"java.lang.OutOfMemoryError: PermGen“。

查看您的日志,我注意到您可能正在从SBT或其他构建工具(如Maven )运行它(“等待源代码更改...”)。为了帮助SBT防止内存泄漏,您可以在午餐时添加以下参数:

代码语言:javascript
复制
java -Xms128M -Xmx1200M -Xss20M -XX:MaxPermSize=1200m -XX:+CMSClassUnloadingEnabled -jar `dirname $0`/sbt-launch.jar "$@"

注意类卸载命令行arg。一般来说,我注意到在SBT中运行的应用程序仍然会设法泄漏资源,但在生产环境中不会发生这种情况。您可以尝试在forked JVM模式下运行,以帮助SBT -例如,请参阅SBT-Revolver插件。如果你真的想知道你的应用程序是如何消耗内存的,以及它是否有内存泄漏,那么在构建工具之外运行它,比如将它部署到Tomcat或运行jar之类的容器。您可以附加jconsole等工具来观察内存使用情况。

票数 3
EN

Stack Overflow用户

发布于 2014-02-08 22:47:11

首先,在启动JVM时增加perm gen的大小。

分析你的代码,找出为什么要使用perm gen。

寻找从不释放引用、深度递归任务等的集合。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21647394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档