programing

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

nasanasas 2020. 8. 31. 07:57
반응형

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 (일반 및 PermGen 모두)을 방지하기 위해 올바른 jvm 옵션을 설정하십시오.

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

If you want to set SBT_OPTS only for the current run of sbt you can use env SBT_OPTS=".." sbt as suggested by Googol Shan. Or you can use the option added in Sbt 12: sbt -mem 2048. This gets unwieldy for longer lists of options, but it might help if you have different projects with different needs.

Note that CMSClassUnloadingEnabled in concert with UseConcMarkSweepGC helps keep the PermGen space clean, but depending on what frameworks you use you might have an actual leak on PermGen, which eventually forces a restart.


In sbt version 12 onwards there is an option for this:

$sbt -mem 2048 

If you run sbt on linux shell, you can use:

env JAVA_OPTS="-Xmx512m" sbt run

This is my usually used command to run my sbt project.


.sbtconfig is deprecated starting with SBT 0.13.6. Instead, I configured these options in /usr/local/etc/sbtopts in the following way:

-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

Use JAVA_OPTS for setting with environment variable.

Use -J-X options to sbt for individual options, e.g. -J-Xmx2048 -J-XX:MaxPermSize=512

Newer versions of sbt have a "-mem" option.


There's one way I know of. Set the environment variable JAVA_OPTS.

JAVA_OPTS='-Xmx512m'

I have not found a way to do this as a command parameter.


The javaOptions += "-XX:MaxPermSize=1024" in our build.sbt as referenced by @iwein above worked for us when we were seeing a java.lang.OutOfMemoryError thrown while running Specs2 tests through sbt.


The environment variable is _JAVA_OPTIONS, which needs to be set. Once you set _JAVA_OPTIONS, and when you sbt, sbt will show the message using JAVA_OPTIONS and the values.

Alternatively you could set javaOption in the sbt or .scala file e.g

javaOptions += "-Xmx1G"

From sbt shell you could run show javaOptions to see the values that are set.


    javaOptions in Test += "-Xmx1G"

This sets the JVM options for tests. Works also with jvm forking (fork in Test := true).


sbt lets you list the JVM options you need to run your project on a file named

.jvmopts

in the root of your project. then add the java options that you want

cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M

it is tested and works in windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html

참고URL : https://stackoverflow.com/questions/3868863/how-to-specify-jvm-maximum-heap-size-xmx-for-running-an-application-with-run

반응형