sbt의 힙 크기를 설정하는 방법은 무엇입니까?


91

SBT 0.12.0을 사용하고 있습니다. 나는 스택 오버플로에 대한 다른 답변을 읽고 따라 왔지만 그중 어느 것도 도움이되지 않습니다.

  • ForkRun클래스 생성 -sbt를 사용하는 동안 분기 된 프로세스를 관찰하지 않았습니다.
  • 환경 변수 설정 JAVA_OPTS-설정되었지만 sbt의 프로세스 명령 줄에서 전혀 사용하지 않는 것 같습니다.
  • sbt -J-Xmx2Gsbt 프로세스 명령 줄에 매개 변수를 추가하지만 -Xmx1536m추가 된 매개 변수 대신 sbt 에서 이전 값 을 사용합니다.

내가 뭔가를 놓치고 있습니까? 테스트 및 테스트를 모두 수행 할 때 sbt 0.12의 힙 크기를 어떻게 설정 run합니까?


9
memsbt를 시작할 때 매개 변수 를 사용해 보셨습니까 ? (예 sbt -mem2000)
om-nom-nom 2013 년

2
당신은 오타가있을 수 있습니다, 그것이 있어야 JAVA_OPTS하지 JAVA_OPS
노아

이 질문의 중복에 대한 내 대답을 확인하십시오. stackoverflow.com/questions/3868863/… 표시된 답변이 잘못되었지만 내 작동합니다 (때로는 댓글 / 투표도 확인해야합니다 :)
iwein

답변:


101

당신은 필요가 SBT_OPTS여기 내에서 무엇을 사용, .bash_profile에 :

export SBT_OPTS="-Xmx1536M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M  -Duser.timezone=GMT"

업데이트 : 2G 힙 공간을 얻으려면 다음을 사용할 수 있습니다.

export SBT_OPTS="-Xmx2G -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M  -Duser.timezone=GMT"

참고 : SBT는 최신 버전이어야합니다.

의 이전 버전 sbt에는 이러한 설정을 무시하는 버그가 포함되어 있으며 Mac brew upgrade sbt용 최신 버전 sbt(brew 설치 가정) (Linux 용 IDK)을 사용합니다. https://github.com/sbt/sbt/issues/2945#issuecomment-277490848


1
감사합니다. 실제로 예상대로 sbt 프로세스 명령 줄을 변경하지만, 이전 버전은 -Xmx1546m여전히 명령 줄에 존재하며 visualvm에 표시된대로 최대 힙 크기는 여전히 1.5GB로 제한됩니다.

1
소스 제어되는 SBT 구성에서이 환경 설정을 설정하는 방법이 있습니까?
Kevin Meredith

scalaz 소스를 살펴 보자, 그들이 필요로하는 부하의 모든 SBT라는 bash는 파일이 일명 환경 고유의 것입니다 github.com/scalaz/scalaz/blob/series/7.2.x/sbt는
노아

4
나는 경고를 얻을 :Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=4G; support was removed in 8.0
samthebest

1
@samthebest Perm Gen은 기본적으로 Java 8에서 제거되었으므로이를 포함 할 필요가 없습니다.
Noah

66

2015 년 3 월부터 Homebrew 와 함께 OSX 에서 sbt를 사용 하는 경우 파일을 편집해야합니다./usr/local/etc/sbtopts

# set memory options
#
#-mem   <integer>
-mem 2048

5
이것은 env 변수 (파일은 c : \ program files \ sbt \ confs 아래에 있음)를 엉망으로 만드는 대신 Windows에서도 잘 작동하는 것 같습니다.
Luciano

2
Linux에서는 /etc/sbt-launcher-packaging.
Robin Green

1
우분투 Artful에서 나는 그것을 발견했습니다/etc/sbt/sbtopts
Synesso

이 솔루션은 JVM이 모든 2GB 메모리를 미리 할당하도록합니다. SBT_OPTS=-Xmx2G sbtSBT를 시작 하는 데 사용 하는 경우 필요에 따라 최대 2GB까지 힙이 증가합니다.
mgd

위의 @mike 솔루션을 살펴보십시오. stackoverflow.com/a/55706960/1199564
mgd

43

"sbt -mem 23000 run"이 저에게 효과적입니다.


6
그게 23Gb 아닌가요 ..?
Ben Hutchison

1
이 아마 paulp의 SBT 래퍼입니다 @BenHutchison 아닌 원래 SBT는이다
matanster

20

해결책을 찾았습니다. JVM 힙 크기를 지정하는 방법에 관계없이 SBT 실행 파일이 이미 재정의되었으므로 작동하지 않습니다.

SBT 실행 파일에는 다음과 같은 줄이 있습니다.

. /usr/share/sbt/sbt-launch-lib.bash

그래서 파일을 편집했습니다.

  # run sbt
  execRunner "$java_cmd" \
    ${SBT_OPTS:-$default_sbt_opts} \
-   $(get_mem_opts $sbt_mem) \
    ${java_opts} \
    ${java_args[@]} \
    -jar "$sbt_jar" \
    "${sbt_commands[@]}" \
    "${residual_args[@]}"

-선을 제거하십시오 .

이제 SBT를 실행할 때 더 이상 JVM 힙 크기 설정을 재정의하지 않습니다. @Noan의 대답을 사용하여 힙 크기 설정을 지정할 수 있습니다.

또는 :

sbt -J-Xmx4G -J-Xms4G


3
실제로 export SBT_OPTS="..."in ~/.sbtconfig은 실제로 작동 하는 것 같습니다 .
Erik Kaplun 2014 년

15

Windows에서 sbt 0.13.9.2의 경우 JAVA_OPTS원하는 jvm 옵션 으로 설정해야합니다 .

> set JAVA_OPTS=-Xmx1G
> sbt assembly

sbt.bat스크립트에서의 기본값을로드 conf\sbtconfig.txtCFG_OPTS있지만 사용 JAVA_OPTS설정하면 대신.

관련 발췌 sbt.bat:

rem FIRST we load the config file of extra options.
set FN=%SBT_HOME%\..\conf\sbtconfig.txt
set CFG_OPTS=
FOR /F "tokens=* eol=# usebackq delims=" %%i IN ("%FN%") DO (
  set DO_NOT_REUSE_ME=%%i
  rem ZOMG (Part #2) WE use !! here to delay the expansion of
  rem CFG_OPTS, otherwise it remains "" for this loop.
  set CFG_OPTS=!CFG_OPTS! !DO_NOT_REUSE_ME!
)

. . . (건너 뛰기) . . .

rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config.
set _JAVA_OPTS=%JAVA_OPTS%
if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS%
:run
"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*

11

SBT를 직접 설치하여 Mac OS X에서 이와 같은 문제를 해결하려고했습니다. homebrew를 통해 SBT를 설치 한 경우 /usr/local/bin/sbt파일이 다음과 같기 때문에 명확합니다.

#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.3/libexec/sbt-launch.jar "$@"

즉, 입력 한 모든 설정이 유지 SBT_OPTS됩니다 (-Xmx가 우선 적용됨). 또한 스크립트의 첫 번째 줄은 ~/.sbtconfig존재하는 경우 모든 명령을 실행 하므로 SBT 옵션을 꽤 많이 사용하는 경우 SBT 옵션을 추가하는 것이 더 좋습니다. source ~/.bash_profile매번 변경할 필요는 없습니다.SBT_OPTS


2
예. 이것은 $ HOME / .sbtconfig에있는 것입니다. export SBT_OPTS = "-XX : MaxPermSize = 512M -Xmx2G -Xms64M"그리고 sbt를 시작할 때 ps aux를 수행하면 / usr / bin / java -Xmx512M -XX : MaxPermSize = 512M -Xmx2G -Xms64M -jar / usr / 지방 / 셀라 / SBT / 0.13.0 / libexec 디렉토리 / SBT-launch.jar
아드리안로드 리 게스

그러나 나는 아래의 대답을 보았고 아마도 그 런처는 다른 유형의 설정을위한 것입니다. 내 설정은 homebrew 패키지를 사용하는 Mac에만 적용됩니다.
Adrian Rodriguez

2
Homebrew SBT는 이제 -mem/usr/local/etc/sbtopts
Synesso의

6

PowerShell에서 sbt를 실행하는 경우 SBT_OPTs다음과 같이 환경 변수를 설정합니다 .

$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"

그런 다음 다음을 실행하십시오.

sbt

6

Windows 의 SBT 버전 1.0.4의 경우 기본 JVM 설정은sbt\conf\sbtconfig.txt 파일 에서 가져옵니다 . 여기에서 값을 편집하기 만하면됩니다. 변경 -Xmx512M-Xmx2048M.

이것이 SBT 용 JVM 옵션의 유일한 소스는 아닙니다. 다른 것들은를 검사하여 찾을 수 있습니다 sbt.bat. 진단하는 간단한 방법은 배치 파일에서 다음 줄을 주석 처리하는 것 @echo off입니다.


참고 : 이것은 sbt\conf사용자 디렉토리가 아니라 C:\Program Files (x86)\sbt\conf.
Suma '

5

이를 수행하는 빠른 방법은 .jvmopts프로젝트의 루트에 있는 파일을 사용하는 것입니다 ( Lagom Framework 문서 ).

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

1
프로젝트 별 설정도 허용하므로 정답으로 표시되어야합니다.
mgd

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.