为什么 Play Framework 2.5 不尊重 sbt 中的 JVM 内存设置?

Dan*_*iel 3 scala sbt playframework

所以我一直在努力使用 Play inside sbt 设置内存设置:

javaOptions ++= Seq("-Xmx11G", "-Xms3G")
Run Code Online (Sandbox Code Playgroud)

但似乎并没有尊重它。

当我打印它时

val mb = 1024*1024

//Getting the runtime reference from system
val runtime = Runtime.getRuntime

println("##### Heap utilization statistics [MB] #####")

//Print used memory
println("Used Memory:" + (runtime.totalMemory() - runtime.freeMemory()) / mb)

//Print free memory
println("Free Memory:" + runtime.freeMemory() / mb)

//Print total available memory
println("Total Memory:" + runtime.totalMemory() / mb)

//Print Maximum available memory
println("Max Memory:" + runtime.maxMemory() / mb)
Run Code Online (Sandbox Code Playgroud)

这是我所看到的:

##### Heap utilization statistics [MB] #####
Used Memory:270
Free Memory:657
Total Memory:928
Max Memory:928
Run Code Online (Sandbox Code Playgroud)

我通过设置尝试了这里的建议_JAVA_OPTIONS,但问题是,它给了我以下错误:

No java installations was detected.
Please go to http://www.java.com/getjava/ and download
Run Code Online (Sandbox Code Playgroud)

有什么想法要做什么吗?

You*_*ice 6

(假设fork设置为true)如果您在生产模式下使用 Play 应用程序启动脚本,建议的方法是将它们作为命令行参数传递给脚本。否则将使用默认的 JVM 设置。sbt run在这里,您正在使用或在开发模式下工作activator run,因此您需要有效地执行相同的操作。

解决方案一:

您可以在命令行上传递参数:

$ sbt run -J-Xms3G -J-Xmx11G
Run Code Online (Sandbox Code Playgroud)

解决方案2:

从 0.13.6开始sbt,您可以.sbtopts在项目根目录中添加文件来设置 JVM 标志。这可能是一种更好的方法,因为它使您的项目变得独立。

这是一个示例.sbtopts

-J-Xms3G
-J-Xmx11G
Run Code Online (Sandbox Code Playgroud)

$ sbt run这是(或)的输出activator run

##### Heap utilization statistics [MB] #####
Used Memory: 364
Free Memory: 4062
Total Memory: 4426
Max Memory: 10012
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关选项和用法的更多信息。

注意:如果这是一个 SBT 项目而不是 Play,javaOptions则 中的定义 build.sbt将直接应用。