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에서 옵션을 설정할 수있었습니다 .
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 (일반 및 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
'programing' 카테고리의 다른 글
몇 가지 Android 앱 및 ICS에서 볼 수있는 것처럼 도움말 오버레이를 만들려면 어떻게해야합니까? (0) | 2020.09.01 |
---|---|
SIGSTOP과 SIGTSTP의 차이점은 무엇입니까? (0) | 2020.09.01 |
문자열에서 문자의 발생 횟수 (0) | 2020.08.31 |
AppCompatActivity.onCreate는 동일한 라이브러리 그룹 내에서만 호출 할 수 있습니다. (0) | 2020.08.31 |
$ (this) .serialize () — 값을 추가하는 방법? (0) | 2020.08.31 |