Aplikasi saya melakukan pemrosesan array data yang besar dan membutuhkan lebih banyak memori daripada yang diberikan JVM secara default. Saya tahu di Java itu ditentukan oleh opsi "-Xmx". Bagaimana cara mengatur SBT agar menggunakan nilai "-Xmx" tertentu untuk menjalankan aplikasi dengan tindakan "run"?
97
javaOptions += "-Xmx1G"
javaOptions
hanya berpengaruh untuk JVM bercabang (lihat scala-sbt.org/0.13/docs/Forking.html )fork in run := ture
mengaktifkanjavaOptions
Untuk proses bercabang, Anda harus melihat Build.scala
Untuk mengubah opsi java untuk proses bercabang, Anda perlu menentukannya di Build.scala (atau apa pun yang Anda beri nama build Anda) seperti ini:
Ini akan memberi Anda opsi yang tepat tanpa memodifikasi JAVA_OPTS secara global, dan itu akan menempatkan JAVA_OPTS khusus dalam skrip awal yang dihasilkan sbt
Untuk proses yang tidak bercabang , paling mudah untuk mengatur konfigurasi melalui
sbtopts
atausbtconfig
bergantung pada versi sbt Anda.Karena sbt 0.13.6
.sbtconfig
tidak digunakan lagi . Ubah di/usr/local/etc/sbtopts
sepanjang baris ini:Anda juga dapat membuat
.sbtopts
file di root proyek SBT Anda menggunakan sintaks yang sama seperti di/usr/local/etc/sbtopts
file. Ini membuat proyek mandiri.Sebelum sbt 0.13.6 Anda dapat mengatur opsi di .sbtconfig untuk proses non-fork :
Periksa di mana sbt berada:
Lihat isinya:
Setel opsi jvm yang benar untuk mencegah OOM (reguler dan PermGen):
Jika Anda ingin menyetel SBT_OPTS hanya untuk menjalankan sbt saat ini, Anda dapat menggunakan
env SBT_OPTS=".." sbt
seperti yang disarankan oleh Googol Shan. Atau Anda dapat menggunakan opsi ditambahkan dalam Sbt 12:sbt -mem 2048
. Ini menjadi sulit untuk daftar opsi yang lebih panjang, tetapi mungkin membantu jika Anda memiliki proyek berbeda dengan kebutuhan berbeda.Perhatikan bahwa CMSClassUnloadingEnabled bersama UseConcMarkSweepGC membantu menjaga ruang PermGen tetap bersih, tetapi bergantung pada kerangka kerja apa yang Anda gunakan, Anda mungkin mengalami kebocoran aktual di PermGen, yang pada akhirnya memaksa restart.
sumber
.sbtopts
file di root proyek SBT Anda menggunakan sintaks yang sama seperti di/usr/local/etc/sbtopts
file. Ini membuat proyek Anda mandiri, yang bisa sangat berguna dalam situasi CI.Di sbt versi 12 dan seterusnya ada opsi untuk ini:
sumber
Not a valid command: mem (similar: set)
Jika Anda menjalankan sbt di linux shell, Anda dapat menggunakan:
Ini adalah perintah yang biasanya saya gunakan untuk menjalankan proyek sbt saya.
sumber
override def fork
solusi di atas. (sbt 0.7.7).sbtconfig
tidak digunakan lagi dimulai dengan SBT0.13.6
. Sebagai gantinya, saya mengonfigurasi opsi ini/usr/local/etc/sbtopts
dengan cara berikut:sumber
-J-Xss1M
agak rendah untuk kelas kasus besar, 4M tampaknya lebih aman.Ada satu cara yang saya tahu. Setel variabel lingkungan JAVA_OPTS.
Saya belum menemukan cara untuk melakukan ini sebagai parameter perintah.
sumber
Gunakan JAVA_OPTS untuk pengaturan dengan variabel lingkungan.
Gunakan opsi -JX ke sbt untuk opsi individual, misalnya -J-Xmx2048 -J-XX: MaxPermSize = 512
Versi sbt yang lebih baru memiliki opsi "-mem".
sumber
Dalam
javaOptions += "-XX:MaxPermSize=1024"
build.sbt kami seperti yang direferensikan oleh @iwein di atas berfungsi untuk kami saat kami melihat java.lang.OutOfMemoryError muncul saat menjalankan pengujian Specs2 melalui sbt.sumber
Variabel lingkungan adalah _JAVA_OPTIONS, yang perlu disetel. Setelah Anda menyetel _JAVA_OPTIONS, dan saat Anda sbt, sbt akan menampilkan pesan menggunakan JAVA_OPTIONS dan nilainya.
Alternatifnya, Anda dapat mengatur javaOption di file sbt atau .scala misalnya
Dari shell sbt Anda dapat menjalankan show javaOptions untuk melihat nilai-nilai yang ditetapkan.
sumber
Ini menetapkan opsi JVM untuk pengujian. Bekerja juga dengan forking jvm (
fork in Test := true
).sumber
build.sbt
?javaOptions in ThisBuild += "-Xmx1G"
ataujavaOptions in (ThisBuild, Test) += "-Xmx1G"
sbt memungkinkan Anda membuat daftar opsi JVM yang Anda perlukan untuk menjalankan proyek Anda pada file bernama
.jvmopts
di root proyek Anda. lalu tambahkan opsi java yang Anda inginkan
itu diuji dan berfungsi di windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html
sumber