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.