Respostas:
Experimente isto:
class ForkRun(info: ProjectInfo) extends DefaultProject(info) {
override def fork = Some(new ForkScalaRun {
override def runJVMOptions = super.runJVMOptions ++ Seq("-Xmx512m")
override def scalaJars = Seq(buildLibraryJar.asFile, buildCompilerJar.asFile)
})
}
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:
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
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
ou sbtconfig
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:
-J-Xms512M
-J-Xmx3536M
-J-Xss1M
-J-XX:+CMSClassUnloadingEnabled
-J-XX:+UseConcMarkSweepGC
-J-XX:MaxPermSize=724M
-J-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
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:
$ which sbt
/usr/local/bin/sbt
Veja o conteúdo:
$ cat /usr/local/bin/sbt
#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.1/libexec/sbt-launch.jar "$@"
Defina as opções corretas de jvm para evitar OOM (regular e PermGen):
$ cat ~/.sbtconfig
SBT_OPTS="-Xms512M -Xmx3536M -Xss1M
-XX:+CMSClassUnloadingEnabled
-XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"
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.
.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:
$sbt -mem 2048
Not a valid command: mem (similar: set)
Se você executar o sbt no shell do Linux, poderá usar:
env JAVA_OPTS="-Xmx512m" sbt run
Este é o meu comando normalmente usado para executar meu projeto sbt.
override def fork
solução acima. (sbt 0.7.7)
.sbtconfig
está obsoleto a partir do SBT 0.13.6
. Em vez disso, configurei essas opções /usr/local/etc/sbtopts
da seguinte maneira:
-J-Xms512M
-J-Xmx3536M
-J-Xss1M
-J-XX:+CMSClassUnloadingEnabled
-J-XX:+UseConcMarkSweepGC
-J-XX:MaxPermSize=724M
-J-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
-J-Xss1M
é um pouco baixo para classes grandes, 4M parece ser mais seguro.
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.
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
javaOptions += "-Xmx1G"
Do shell sbt, você pode executar show javaOptions para ver os valores definidos.
javaOptions in Test += "-Xmx1G"
Isso define as opções de JVM para testes. Funciona também com jvm forking ( fork in Test := true
).
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
cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M
ele é testado e funciona no Windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html
javaOptions += "-Xmx1G"