Saya menggunakan SBT 0.12.0. Saya telah membaca jawaban lain tentang stack overflow dan mengikutinya, namun tidak ada yang membantu, misalnya:
- create
ForkRun
class - Saya belum mengamati proses bercabang selama penggunaan sbt - set variabel lingkungan
JAVA_OPTS
- sudah disetel tetapi baris perintah proses sbt tampaknya tidak menggunakannya sama sekali. sbt -J-Xmx2G
menambahkan parameter ke baris perintah proses sbt, namun nilai lama-Xmx1536m
digunakan oleh sbt sebagai ganti parameter yang ditambahkan.
Apakah saya melewatkan sesuatu? Bagaimana cara menyetel ukuran heap untuk sbt 0,12, saat melakukan pengujian dan run
?
mem
parameter saat memulai sbt? (misalnyasbt -mem2000
)Jawaban:
Anda perlu
SBT_OPTS
, inilah yang saya gunakan di .bash_profile saya :export SBT_OPTS="-Xmx1536M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M -Duser.timezone=GMT"
PEMBARUAN: Untuk mendapatkan ruang heap 2G, Anda dapat menggunakan ini:
export SBT_OPTS="-Xmx2G -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M -Duser.timezone=GMT"
CATATAN: SBT HARUS VERSI TERBARU
Versi lama
sbt
berisi bug yang menggantikan pengaturan ini, gunakan untuk Macbrew upgrade sbt
terbarusbt
(dengan asumsi brew install) (IDK untuk Linux). https://github.com/sbt/sbt/issues/2945#issuecomment-277490848sumber
-Xmx1546m
masih ada di baris perintah dan ukuran tumpukan maksimum masih dibatasi pada 1,5 GB, seperti yang ditunjukkan di visualvm.Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=4G; support was removed in 8.0
Mulai Maret 2015, jika Anda menggunakan sbt di OSX dengan Homebrew, maka Anda harus mengedit file tersebut
/usr/local/etc/sbtopts
misalnya
# set memory options # #-mem <integer> -mem 2048
sumber
/etc/sbt-launcher-packaging
./etc/sbt/sbtopts
SBT_OPTS=-Xmx2G sbt
untuk memulai SBT, itu akan menambah tumpukan sesuai kebutuhan hingga maksimum 2GB."sbt -mem 23000 run" cocok untuk saya.
sumber
Saya sudah menemukan solusinya. Tidak peduli bagaimana Anda menentukan ukuran heap JVM, itu tidak akan pernah berfungsi karena SBT yang dapat dieksekusi sudah menimpanya.
Ada baris dalam SBT yang dapat dieksekusi yang mengatakan:
. /usr/share/sbt/sbt-launch-lib.bash
Jadi saya mengedit file:
# 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[@]}"
Hapus
-
garis.Sekarang ketika Anda menjalankan SBT, itu tidak akan lagi menggantikan pengaturan ukuran heap JVM Anda. Anda dapat menentukan pengaturan ukuran heap menggunakan jawaban @ Noan.
Atau sebagai alternatif:
sbt -J-Xmx4G -J-Xms4G
sumber
export SBT_OPTS="..."
dalam~/.sbtconfig
melakukan kerja memang.Di windows, untuk sbt 0.13.9.2, Anda perlu mengatur
JAVA_OPTS
ke opsi jvm yang Anda inginkan.> set JAVA_OPTS=-Xmx1G > sbt assembly
The
sbt.bat
Script beban default-nya dariconf\sbtconfig.txt
dalamCFG_OPTS
tetapi akan menggunakanJAVA_OPTS
bukan jika set.Kutipan yang relevan dari
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! )
. . . (lewati). . .
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 %*
sumber
Saya ingin menyelesaikan masalah seperti ini di Mac OS X dengan menginstal SBT homebrew. Jika Anda menginstal SBT melalui homebrew, Anda di bersihkan karena
/usr/local/bin/sbt
file tersebut terlihat seperti#!/bin/sh test -f ~/.sbtconfig && . ~/.sbtconfig exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.3/libexec/sbt-launch.jar "$@"
Ini berarti bahwa pengaturan apa pun yang Anda masukkan
SBT_OPTS
akan tetap (-Xmx Anda akan diutamakan). Selain itu, baris pertama skrip akan menjalankan perintah apa pun~/.sbtconfig
jika ada, jadi ini mungkin tempat yang lebih baik untuk meletakkan opsi SBT Anda jika Anda cukup sering memainkannya. Anda tidak perlu melakukannyasource ~/.bash_profile
setiap kali Anda membuat perubahan padaSBT_OPTS
sumber
-mem
parameter di/usr/local/etc/sbtopts
Jika menjalankan sbt dari PowerShell, setel
SBT_OPTs
variabel lingkungan, seperti ini:$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"
Lalu lari:
sumber
Untuk SBT versi 1.0.4 di Windows , pengaturan JVM
sbt\conf\sbtconfig.txt
default berasal dari file. Cukup edit nilainya di sini. Ganti-Xmx512M
ke-Xmx2048M
.Ini bukan satu-satunya sumber opsi JVM untuk SBT. Lainnya dapat ditemukan dengan memeriksa
sbt.bat
. Sebuah cara sederhana untuk mendiagnosa, di mana pengaturan berasal, adalah dengan komentar dari baris ini di file batch:@echo off
.sumber
sbt\conf
ditempatkan bukan di direktori pengguna, tetapi di folder Program Files, sepertiC:\Program Files (x86)\sbt\conf
.Cara cepat untuk melakukannya adalah dengan
.jvmopts
file di root proyek Anda (dari dokumentasi Lagom Framework ):$ cat .jvmopts -Xms512M -Xmx4096M -Xss2M -XX:MaxMetaspaceSize=1024M
sumber
Dalam kasus saya, konfigurasi layanan saya menimpa variabel lingkungan
SBT_OPTS
danJAVA_OPTS
. Saya dapat menetapkan batasan dengan menetapkanbuild.sbt
sebagai berikut:javaOptions in Universal ++= Seq( "-J-Xms1g", "-J-Xmx2g")
Referensi: https://www.scala-sbt.org/sbt-native-packager/archetypes/java_app/customize.html
sumber