Meu aplicativo faz um grande processamento de matrizes de dados e precisa de mais memória do que a JVM fornece por padrão. Eu sei que em Java é especificado pela opção "-Xmx". Como configuro o SBT para usar o valor "-Xmx" específico para executar um aplicativo com a ação "executar"?
97
javaOptions += "-Xmx1G"
javaOptions
apenas ter efeito para JVMs bifurcadas (ver scala-sbt.org/0.13/docs/Forking.html )fork in run := ture
habilitajavaOptions
Para processos bifurcados, você deve olhar para Build.scala
Para modificar as opções java para processos bifurcados, você precisa especificá-los no Build.scala (ou qualquer outro nome que você tenha nomeado para sua construção), como este:
Isso lhe dará as opções adequadas sem modificar JAVA_OPTS globalmente e colocará JAVA_OPTS personalizado em um script inicial gerado por sbt
Para processos não bifurcados , é mais conveniente definir a configuração via
sbtopts
ousbtconfig
dependendo da versão do sbt.Já que o sbt 0.13.6
.sbtconfig
está obsoleto . Modifique/usr/local/etc/sbtopts
ao longo destas linhas:Você também pode criar um
.sbtopts
arquivo na raiz do seu projeto SBT usando a mesma sintaxe do/usr/local/etc/sbtopts
arquivo. Isso torna o projeto independente.Antes do sbt 0.13.6, você podia definir as opções em .sbtconfig para processos não bifurcados :
Verifique onde está sbt:
Veja o conteúdo:
Defina as opções corretas de jvm para evitar OOM (regular e PermGen):
Se você deseja definir SBT_OPTS apenas para a execução atual do sbt, pode usar
env SBT_OPTS=".." sbt
conforme sugerido por Googol Shan. Ou você pode usar a opção adicional no SBT 12:sbt -mem 2048
. Isso fica difícil para listas de opções mais longas, mas pode ajudar se você tiver projetos diferentes com necessidades diferentes.Observe que CMSClassUnloadingEnabled em conjunto com UseConcMarkSweepGC ajuda a manter o espaço PermGen limpo, mas dependendo de quais estruturas você usa, pode haver um vazamento real no PermGen, que eventualmente força uma reinicialização.
fonte
.sbtopts
arquivo na raiz do seu projeto SBT usando a mesma sintaxe do/usr/local/etc/sbtopts
arquivo. Isso torna seu projeto independente, o que pode ser muito útil em situações de CI.Na versão 12 em diante do sbt, há uma opção para isso:
fonte
Not a valid command: mem (similar: set)
Se você executar o sbt no shell do Linux, poderá usar:
Este é o meu comando normalmente usado para executar meu projeto sbt.
fonte
override def fork
solução acima. (sbt 0.7.7).sbtconfig
está obsoleto a partir do SBT0.13.6
. Em vez disso, configurei essas opções/usr/local/etc/sbtopts
da seguinte maneira:fonte
-J-Xss1M
é um pouco baixo para classes grandes, 4M parece ser mais seguro.Existe uma maneira que eu conheço. Defina a variável de ambiente JAVA_OPTS.
Não encontrei uma maneira de fazer isso como um parâmetro de comando.
fonte
Use JAVA_OPTS para configurar com a variável de ambiente.
Use as opções -JX para sbt para opções individuais, por exemplo, -J-Xmx2048 -J-XX: MaxPermSize = 512
As versões mais recentes do sbt têm uma opção "-mem".
fonte
O
javaOptions += "-XX:MaxPermSize=1024"
em nosso build.sbt, conforme referenciado por @iwein acima, funcionou para nós quando vimos um java.lang.OutOfMemoryError lançado durante a execução de testes Specs2 por meio de sbt.fonte
A variável de ambiente é _JAVA_OPTIONS, que precisa ser definida. Depois de definir _JAVA_OPTIONS, e quando você sbt, sbt mostrará a mensagem usando JAVA_OPTIONS e os valores.
Alternativamente, você pode definir javaOption no arquivo sbt ou .scala, por exemplo
Do shell sbt, você pode executar show javaOptions para ver os valores definidos.
fonte
Isso define as opções de JVM para testes. Funciona também com jvm forking (
fork in Test := true
).fonte
build.sbt
?javaOptions in ThisBuild += "-Xmx1G"
oujavaOptions in (ThisBuild, Test) += "-Xmx1G"
sbt permite listar as opções JVM de que você precisa para executar seu projeto em um arquivo chamado
.jvmopts
na raiz do seu projeto. em seguida, adicione as opções java que você deseja
ele é testado e funciona no Windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html
fonte