[scala] SBT에서 “실행”작업으로 응용 프로그램을 실행하기 위해 JVM 최대 힙 크기 “-Xmx”를 지정하는 방법은 무엇입니까?

내 응용 프로그램은 대용량 데이터 배열 처리를 수행하며 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에서 옵션을 설정할 수있었습니다 .

  1. sbt가 어디에 있는지 확인하십시오.

    $ which sbt
    /usr/local/bin/sbt
  2. 내용을보십시오 :

    $ 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 "$@"
  3. OOM을 방지하려면 올바른 jvm 옵션을 설정하십시오 (일반 및 PermGen 모두) :

    $ cat ~/.sbtconfig
    SBT_OPTS="-Xms512M -Xmx3536M -Xss1M 
     -XX:+CMSClassUnloadingEnabled
     -XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"

현재 sbt 실행에 대해서만 SBT_OPTS를 설정하려면 env SBT_OPTS=".." sbtGoogol Shan이 제안한대로 사용할 수 있습니다 . 또는 Sbt 12 :에서 추가 된 옵션을 사용할 수 있습니다 sbt -mem 2048. 옵션 목록이 길면 다루기 어렵지만 요구 사항이 다른 프로젝트가있는 경우 도움이 될 수 있습니다.

UseConcMarkSweepGC와 함께 CMSClassUnloadingEnabled는 PermGen 공간을 깨끗하게 유지하는 데 도움이되지만 사용하는 프레임 워크에 따라 PermGen에 실제 누출이있을 수 있으며 결국 강제로 다시 시작됩니다.


답변

sbt 버전 12 이후에는 이에 대한 옵션이 있습니다.

$sbt -mem 2048 


답변

Linux 쉘에서 sbt를 실행하면 다음을 사용할 수 있습니다.

env JAVA_OPTS="-Xmx512m" sbt run

이것은 내 sbt 프로젝트를 실행하는 데 일반적으로 사용되는 명령입니다.


답변

.sbtconfigSBT부터는 더 이상 사용되지 않습니다 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”옵션이 있습니다.