답변:
이 시도:
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
만 갈래의 JVM (참조에 대한 영향을 scala-sbt.org/0.13/docs/Forking.html을 )
fork in run := ture
활성화 추가javaOptions
분기 된 프로세스의 경우 Build.scala를 확인해야합니다.
분기 된 프로세스에 대한 자바 옵션을 수정하려면 다음과 같이 Build.scala (또는 빌드 이름을 지정한 모든 항목)에 옵션을 지정해야합니다.
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
이는 전 세계적으로 JAVA_OPTS를 수정하지 않고 당신에게 적절한 옵션을 줄 것이다, 그리고 그것은 사용자 지정 JAVA_OPTS를 넣어 것입니다 SBT 생성 시작 스크립트
들어 비 갈래 프로세스는 통해 설정을 설정하는 것이 가장 편리 sbtopts
또는 sbtconfig
당신의 SBT 버전에 따라.
sbt 0.13.6 .sbtconfig
은 더 이상 사용되지 않기 때문에 . /usr/local/etc/sbtopts
다음 행을 따라 수정하십시오 .
-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
.sbtopts
파일과 동일한 구문을 사용하여 SBT 프로젝트의 루트에 파일을 만들 수도 있습니다 /usr/local/etc/sbtopts
. 이것은 프로젝트를 독립적으로 만듭니다.
sbt 0.13.6 이전 에는 분기되지 않은 프로세스에 대해 .sbtconfig에서 옵션을 설정할 수있었습니다 .
sbt가 어디에 있는지 확인하십시오.
$ which sbt
/usr/local/bin/sbt
내용을보십시오 :
$ 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 "$@"
OOM을 방지하려면 올바른 jvm 옵션을 설정하십시오 (일반 및 PermGen 모두) :
$ cat ~/.sbtconfig
SBT_OPTS="-Xms512M -Xmx3536M -Xss1M
-XX:+CMSClassUnloadingEnabled
-XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"
현재 sbt 실행에 대해서만 SBT_OPTS를 설정하려면 env SBT_OPTS=".." sbt
Googol Shan이 제안한대로 사용할 수 있습니다 . 또는 Sbt 12 :에서 추가 된 옵션을 사용할 수 있습니다 sbt -mem 2048
. 옵션 목록이 길면 다루기 어렵지만 요구 사항이 다른 프로젝트가있는 경우 도움이 될 수 있습니다.
UseConcMarkSweepGC와 함께 CMSClassUnloadingEnabled는 PermGen 공간을 깨끗하게 유지하는 데 도움이되지만 사용하는 프레임 워크에 따라 PermGen에 실제 누출이있을 수 있으며 결국 강제로 다시 시작됩니다.
.sbtopts
파일과 동일한 구문을 사용하여 SBT 프로젝트의 루트에 파일을 만들 수도 있습니다 /usr/local/etc/sbtopts
. 이것은 프로젝트를 독립적으로 만들어 CI 상황에서 매우 편리 할 수 있습니다.
sbt 버전 12 이후에는 이에 대한 옵션이 있습니다.
$sbt -mem 2048
Not a valid command: mem (similar: set)
Linux 쉘에서 sbt를 실행하면 다음을 사용할 수 있습니다.
env JAVA_OPTS="-Xmx512m" sbt run
이것은 내 sbt 프로젝트를 실행하는 데 일반적으로 사용되는 명령입니다.
override def fork
위 의 해결책이 필요했습니다 . (SBT 0.7.7)
.sbtconfig
SBT부터는 더 이상 사용되지 않습니다 0.13.6
. 대신 /usr/local/etc/sbtopts
다음과 같은 방식으로 이러한 옵션을 구성했습니다 .
-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
큰 케이스 클래스의 경우 약간 낮으며 4M이 더 안전한 것 같습니다.
javaOptions += "-XX:MaxPermSize=1024"
sbt를 통해 Specs2 테스트를 실행하는 동안 발생한 java.lang.OutOfMemoryError를 보았을 때 위의 @iwein에서 참조한 build.sbt 의 는 우리를 위해 일했습니다.
javaOptions in Test += "-Xmx1G"
테스트를위한 JVM 옵션을 설정합니다. JVM의 포크 (fork)으로도 작동 ( fork in Test := true
).
build.sbt
있습니까?
javaOptions in ThisBuild += "-Xmx1G"
또는javaOptions in (ThisBuild, Test) += "-Xmx1G"
sbt를 사용하면 다음과 같은 파일에서 프로젝트를 실행하는 데 필요한 JVM 옵션을 나열 할 수 있습니다.
.jvmopts
프로젝트의 루트에 있습니다. 그런 다음 원하는 Java 옵션을 추가하십시오.
cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M
Windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html 에서 테스트되고 작동합니다.
javaOptions += "-Xmx1G"