내 응용 프로그램은 대용량 데이터 배열 처리를 수행하며 JVM이 기본적으로 제공하는 것보다 더 많은 메모리가 필요합니다. Java에서 “-Xmx”옵션으로 지정된다는 것을 알고 있습니다. 특정 “-Xmx”값을 사용하여 “실행”동작으로 응용 프로그램을 실행하도록 SBT를 설정하려면 어떻게합니까?
답변
이 시도:
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)
})
}
답변
분기 된 프로세스의 경우 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에 실제 누출이있을 수 있으며 결국 강제로 다시 시작됩니다.
답변
sbt 버전 12 이후에는 이에 대한 옵션이 있습니다.
$sbt -mem 2048
답변
Linux 쉘에서 sbt를 실행하면 다음을 사용할 수 있습니다.
env JAVA_OPTS="-Xmx512m" sbt run
이것은 내 sbt 프로젝트를 실행하는 데 일반적으로 사용되는 명령입니다.
답변
.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
답변
내가 아는 한 가지 방법이 있습니다. 환경 변수 JAVA_OPTS를 설정합니다.
JAVA_OPTS='-Xmx512m'
명령 매개 변수로이 작업을 수행하는 방법을 찾지 못했습니다.
답변
환경 변수로 설정하려면 JAVA_OPTS를 사용하십시오.
-JX 옵션을 사용하여 개별 옵션에 대해 sbt (예 : -J-Xmx2048 -J-XX : MaxPermSize = 512)
최신 버전의 sbt에는 “-mem”옵션이 있습니다.
