Passando argumentos JVM corretos para o aplicativo Play 2.2.1 no Heroku
-
21-12-2019 - |
Pergunta
Estou tentando passar argumentos JVM corretos para meu aplicativo Play 2.2.1 implantado no Heroku, mas há um problema.
Meu perfil fica assim:
rede: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
Neste artigo (https://devcenter.heroku.com/articles/play-support) diz que PLAY_OPTS não precisa ser passado porque é lido pelo script gerado.No entanto, no meu aplicativo, em tempo de execução, li os argumentos da JVM e eles se parecem com isto:
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
Então o "JAVA_OPTS:-Xmx384m -Xss512k -XX:+UseCompressedOops" aparentemente não é lido pelo script.
Também tentei anexar -Xmx384m -Xss512k -XX:+UseCompressedOops ao Procfile, mas, novamente, não funcionou.
Como posso fazer isso funcionar?
Solução
O problema era que o script de reprodução gerado lê "java_opts" minúsculo em vez de "JAVA_OPTS".
Então, se você definir a variável java_opts, ela funcionará:
heroku config:set java_opts="-Xms128m -Xmx384m -Xss512k -XX:+UseCompressedOops"