【问题标题】:Out of memory in PlayFramework 2.0Play Framework 2.0 内存不足
【发布时间】:2015-07-16 20:47:29
【问题描述】:

如何增加 Play 环境的可用内存?运行测试一段时间后内存不足。

特别是,我收到此错误:

java.lang.OutOfMemoryError: PermGen 空间

【问题讨论】:

标签: playframework-2.0


【解决方案1】:

通过设置环境变量“_JAVA_OPTIONS”,可以传入play/sbt在正常使用时会用到的变量。我发现这有助于我在运行开发和测试时避免 PermGen 空间错误。

例如:

导出_JAVA_OPTIONS="-Xms64m -Xmx1024m -Xss2m -XX:MaxPermSize=256m"

【讨论】:

  • 支持环境变量。这更有用,因为它允许您为不同的环境设置这些设置。我们有一个单独的服务器用于开发,一个用于我们的生产应用程序,我们的开发服务器不需要太多内存。以及我们本地开发环境的注意事项。
  • 赞成,但最初的问题是关于 PermGen 空间,所以最后一个参数需要是 MaxPermSize=256m
【解决方案2】:

我通过添加解决了这个问题:

javaOptions ++= Seq("-Xmx2048M", "-Xms512M", "-XX:MaxPermSize=2048M")

在 Build.scala 中设置。

【讨论】:

  • 将最大 2Gb 设置为 perm gen 空间至少是不知道 perm gen 意味着什么并将问题推迟到未来。您需要了解为什么您的应用程序会分配如此多的类元数据...
  • @Jonathan 这并非适用于所有用例。我的游戏!应用程序正在跨 200 万边缘的 Cassovary 图运行 PageRank 算法……它完全有权分配更多的 perm gen。 ;)
  • play 不支持“-mem”标志吗?我在任何地方都找不到有关此的文档,但以前见过它。
【解决方案3】:

用于播放的 Java 启动选项是在脚本中创建的:

$PLAY_HOME/framework/build

可以通过修改文件底部的行来增加PermGen空间:

java ${DEBUG_PARAM} -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M ...

将 MaxPermSize 变量设置为适当的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多