java - 将正确的 JVM 参数传递给 Heroku 上的 Play 2.2.1 应用程序

标签 java heroku jvm playframework-2.2

我尝试将正确的 JVM 参数传递给部署在 Heroku 上的 play 2.2.1 应用程序,但出现问题。

我的 Procfile 如下所示:

web: target/universal/stage/bin/myapp -Dhttp.port=${PORT} -Dconfig.file=conf/production.conf -J-javaagent:lib/heroku-javaagent-1.4.jar=stdout=true,lxmem=true -J-javaagent:lib/newrelic.jar -J-Dnewrelic.config.file=lib/newrelic.yml

在这篇文章(https://devcenter.heroku.com/articles/play-support)中,它说不需要传递 PLAY_OPTS,因为它是由生成的脚本读取的。然而,在我的应用程序中,在运行时我读取了 JVM 参数,它们看起来像这样:

JVM value: -Djava.rmi.server.useCodebaseOnly=true
JVM value: -Xms1024m
JVM value: -XX:MaxPermSize=256m
JVM value: -XX:ReservedCodeCacheSize=128m
JVM value: -Duser.dir=/app/target/universal/stage
JVM value: -Dhttp.port=57279
JVM value: -javaagent:lib/heroku-javaagent-1.4.jar=stdout=true,lxmem=true
JVM value: -Xmx1024m
JVM value: -javaagent:lib/newrelic.jar
JVM value: -Dnewrelic.config.file=lib/newrelic.yml
JVM value: -Dconfig.file=conf/production.conf

因此“JAVA_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOops”显然不会被脚本读取。

我还尝试将 -Xmx384m -Xss512k -XX:+UseCompressedOops 附加到 Procfile,但同样,它不起作用。

我怎样才能做到这一点?

最佳答案

问题是生成的播放脚本读取小写的“java_opts”而不是“JAVA_OPTS”。

因此,如果您设置 java_opts 变量,它将起作用:

heroku config:set java_opts="-Xms128m -Xmx384m -Xss512k -XX:+UseCompressedOops"

关于java - 将正确的 JVM 参数传递给 Heroku 上的 Play 2.2.1 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056013/

相关文章:

ruby-on-rails - Heroku 错误 R14(超出内存配额): How do I solve this?

java - 当我明确告知 Heroku 时,为什么 Heroku 无法识别正确的 Java 版本?

java - 没有引用的新对象的生命周期

java - 获取没有 PATH 变量的 JavaVM 路径 (Windows)

java - 解决许多proguard警告

java - 当给定一个整数 x 时,编写一个函数;返回 e 具有以下近似值

java - 如何获取用户界面:param value in Javabean

ruby-on-rails - Heroku 上的应用程序出现奇怪的日志错误

java - 今天在 JVM 中最接近真正(资源受限)隔离的是什么?

java - @StaticMetamodel 和 SingularAttribute<Obj,Obj> 是什么?