SBT için yığın boyutu nasıl ayarlanır?


92

SBT 0.12.0 kullanıyorum. Yığın taşmasıyla ilgili diğer yanıtları okudum ve takip ettim, ancak hiçbiri yardımcı olmuyor, örneğin:

  • oluşturmak ForkRun class - sbt kullanımım sırasında herhangi bir çatallı süreç gözlemlemedim
  • ortam değişkenini ayarla JAVA_OPTS - ayarlanmıştır ancak sbt'nin işlem komut satırı onu hiç kullanmıyor gibi görünüyor.
  • sbt -J-Xmx2Gparametreyi sbt işlem komut satırına ekler, ancak eski değer -Xmx1536m, eklenen parametre yerine sbt tarafından kullanılır.

Bir şey mi kaçırıyorum? Hem testi yaparken hem de sbt 0.12 için yığın boyutunu nasıl ayarlayabilirim run?


9
memSbt'yi başlatırken parametre denediniz mi? (örneğin sbt -mem2000)
om-nom-nom

2
Bir yazım hatası olabilir, olması gerektiği JAVA_OPTS değil JAVA_OPS
Noah

Bu sorunun bir kopyasına verdiğim cevaba bakın. stackoverflow.com/questions/3868863/… işaretli yanıt yanlış, ancak benimki işe yarıyor (bazen yorumları / oyları da kontrol etmeniz gerekir :)
iwein

Yanıtlar:


102

İhtiyacınız olan SBT_OPTS, işte benim .bash_profile dosyamda kullandığım şey :

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

GÜNCELLEME: 2G yığın alanınızı almak için şunu kullanabilirsiniz:

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

NOT: SBT EN SON SÜRÜM OLMALIDIR

Eski sürümleri, sbtbu ayarları geçersiz kılan hatalar içerir, brew upgrade sbten son sbtMac için kullanın (brew kurulumu varsayarak) (Linux için IDK). https://github.com/sbt/sbt/issues/2945#issuecomment-277490848


1
Teşekkür ederim. Gerçekten de, sbt işlem komut satırını beklendiği gibi değiştirir, ancak eski -Xmx1546mhala komut satırında mevcuttur ve maksimum yığın boyutu, visualvm'de gösterildiği gibi hala 1.5 GB ile sınırlıdır.

1
Bu ortam ayarını kaynak kontrollü SBT yapılandırmasında yapmanın herhangi bir yolu var mı?
Kevin Meredith

Scalaz kaynağına bir göz atın, ihtiyaç duydukları her şeyi yükleyen sbt adında bir bash dosyası var, diğer bir deyişle ortama özgü github.com/scalaz/scalaz/blob/series/7.2.x/sbt
Noah

4
Bir uyarı Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=4G; support was removed in 8.0
alıyorum

1
@samthebest Perm Gen temelde Java 8'de kaldırıldı, bu yüzden bunu eklemek gerekli değil.
Noah

66

Üzerinde SBT kullanıyorsanız Mart 2015 tarihi itibariyle OSX ile Homebrew ardından dosyayı düzenlemeniz gerekir/usr/local/etc/sbtopts

Örneğin

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

5
Bu, env değişkenleriyle uğraşmak yerine (dosya c: \ program files \ sbt \ confs altında) Windows için de iyi çalışıyor gibi görünüyor.
Luciano

2
Linux'ta var /etc/sbt-launcher-packaging.
Robin Green

1
Ubuntu /etc/sbt/sbtopts
Artful'da

Bu çözüm, JVM'nin tüm 2GB belleği önceden tahsis etmesini sağlayacaktır. SBT_OPTS=-Xmx2G sbtSBT'yi başlatmak için kullanırsanız , yığını gerektiği kadar maksimum 2 GB'a kadar büyütür.
mgd

Yukarıdaki @mike çözümüne bir göz atın: stackoverflow.com/a/55706960/1199564
mgd

43

"sbt -mem 23000 run" benim için çalışıyor.


6
bu 23Gb değil ..?
Ben Hutchison

1
@BenHutchison bu muhtemelen Paulp'un sbt paketleyicisidir, orijinal sbt değil o
matanster

20

Çözümü buldum. JVM yığın boyutunu nasıl belirtirseniz belirtin, bu hiçbir zaman çalışmayacaktır çünkü SBT yürütülebilir dosyası zaten geçersiz kılınmıştır.

SBT çalıştırılabilir dosyasında şunu söyleyen bir satır var:

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

Ben de dosyayı düzenledim:

  # 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[@]}"

-Çizgiyi kaldırın .

Artık SBT'yi çalıştırdığınızda, artık JVM yığın boyutu ayarlarınızı geçersiz kılmayacaktır. @ Noan'ın cevabını kullanarak yığın boyutu ayarlarını belirtebilirsiniz.

Veya alternatif olarak:

sbt -J-Xmx4G -J-Xms4G


3
Aslında görünüyor export SBT_OPTS="..."içinde ~/.sbtconfiggerçekten çalışmıyor.
Erik Kaplun

15

Windows'ta sbt 0.13.9.2 için, istediğiniz JAVA_OPTSjvm seçeneklerini ayarlamanız gerekir .

> set JAVA_OPTS=-Xmx1G
> sbt assembly

sbt.batSenaryo onun varsayılan yükler conf\sbtconfig.txtiçine CFG_OPTSancak kullanacak JAVA_OPTSseti ise yerine.

Aşağıdakilerden ilgili alıntılar 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!
)

. . . (atla). . .

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'nin homebrew yüklemesiyle Mac OS X'te buna benzer bir sorunu çözmek istiyordum. SBT'yi homebrew aracılığıyla yüklediyseniz, /usr/local/bin/sbtdosya göründüğü için netsiniz.

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

Bu, koyduğunuz herhangi bir ayarın SBT_OPTSdeğişmeyeceği anlamına gelir (-Xmx'iniz öncelik kazanır). Dahası, komut dosyasının ilk satırı ~/.sbtconfigeğer varsa komutları çalıştıracaktır , bu nedenle SBT seçeneklerinizi biraz onlarla oynuyorsanız koymak için daha iyi bir yer olabilir. source ~/.bash_profileHer değişiklik yaptığınızda zorunda kalmayacaksınızSBT_OPTS


2
Evet. $ HOME / .sbtconfig içinde sahip olduğum şey bu. export SBT_OPTS = "- XX: MaxPermSize = 512M -Xmx2G -Xms64M" ve sbt'yi başlattığımda bir ps aux yapıyorum ve / usr / bin / java -Xmx512M -XX: MaxPermSize = 512M -Xmx2G -Xms64M -jar / usr / local / Cellar / sbt / 0.13.0 / libexec / sbt-launch.jar
Adrian Rodriguez

Ancak, aşağıdaki yanıtı yeni gördüm ve belki de bu başlatıcı başka bir kurulum türü içindir. Kurulumum homebrew paketini kullanan Mac'e özel.
Adrian Rodriguez

2
Homebrew SBT artık yığın boyutunun -memparametre ile yapılandırılmasını gerektiriyor/usr/local/etc/sbtopts
Synesso

6

PowerShell'den sbt çalıştırıyorsanız, SBT_OPTsortam değişkenini şu şekilde ayarlayın:

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

O zaman koş:

sbt

6

Windows'ta SBT 1.0.4 sürümü için varsayılan JVM ayarlarısbt\conf\sbtconfig.txt dosyadan gelir . Değerleri burada düzenleyin. Değişim -Xmx512Miçin-Xmx2048M .

SBT için JVM seçeneklerinin tek kaynağı bu değildir. Diğerleri incelenerek bulunabilir sbt.bat. Ayarları nasıl belirleniyor teşhis etmek basit bir yolu, toplu dosyasında bu satırı dışında yorum gereğidir: @echo off.


Not: Bu sbt\conf, kullanıcı dizinine değil, Program Dosyaları klasörüne, gibi C:\Program Files (x86)\sbt\conf.
Suma

6

Bunu yapmanın hızlı bir yolu .jvmopts, projenizin kök dizininde bulunan bir dosyadır ( Lagom Framework belgelerinden ):

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

1
Proje ayarlarına da izin verdiği için bu doğru cevap olarak işaretlenmelidir.
mgd

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.