Câu trả lời:
Thử cái này:
class ForkRun(info: ProjectInfo) extends DefaultProject(info) {
override def fork = Some(new ForkScalaRun {
override def runJVMOptions = super.runJVMOptions ++ Seq("-Xmx512m")
override def scalaJars = Seq(buildLibraryJar.asFile, buildCompilerJar.asFile)
})
}
javaOptions
chỉ có hiệu lực đối với các JVM đã phân nhánh (xem scala-sbt.org/0.13/docs/Forking.html )
fork in run := ture
cho phépjavaOptions
Đối với các quy trình được phân nhánh, bạn nên xem Build.scala
Để sửa đổi các tùy chọn java cho các quy trình đã phân nhánh, bạn cần chỉ định chúng trong Build.scala (hoặc bất kỳ thứ gì bạn đã đặt tên cho bản dựng của mình) như sau:
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
Điều này sẽ cung cấp cho bạn các tùy chọn thích hợp mà không cần sửa đổi JAVA_OPTS trên toàn cầu và nó sẽ đặt JAVA_OPTS tùy chỉnh trong một tập lệnh bắt đầu được tạo sbt
Đối với các quy trình không phân nhánh , thuận tiện nhất là đặt cấu hình thông qua sbtopts
hoặc sbtconfig
tùy thuộc vào phiên bản sbt của bạn.
Vì sbt 0.13.6 .sbtconfig
không được dùng nữa . Sửa đổi /usr/local/etc/sbtopts
theo các dòng sau:
-J-Xms512M
-J-Xmx3536M
-J-Xss1M
-J-XX:+CMSClassUnloadingEnabled
-J-XX:+UseConcMarkSweepGC
-J-XX:MaxPermSize=724M
-J-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
Bạn cũng có thể tạo một .sbtopts
tệp trong thư mục gốc của dự án SBT của mình bằng cách sử dụng cú pháp tương tự như trong /usr/local/etc/sbtopts
tệp. Điều này làm cho dự án trở nên khép kín.
Trước sbt 0.13.6, bạn có thể đặt các tùy chọn trong .sbtconfig cho các quy trình không phân nhánh :
Kiểm tra sbt ở đâu:
$ which sbt
/usr/local/bin/sbt
Xem nội dung:
$ cat /usr/local/bin/sbt
#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.1/libexec/sbt-launch.jar "$@"
Đặt các tùy chọn jvm chính xác để ngăn OOM (cả thông thường và PermGen):
$ cat ~/.sbtconfig
SBT_OPTS="-Xms512M -Xmx3536M -Xss1M
-XX:+CMSClassUnloadingEnabled
-XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"
Nếu bạn chỉ muốn đặt SBT_OPTS cho loạt sbt hiện tại, bạn có thể sử dụng env SBT_OPTS=".." sbt
theo đề xuất của Googol Shan. Hoặc bạn có thể sử dụng tùy chọn được thêm trong Sbt 12 : sbt -mem 2048
. Điều này khó sử dụng đối với danh sách các tùy chọn dài hơn, nhưng nó có thể hữu ích nếu bạn có các dự án khác nhau với các nhu cầu khác nhau.
Lưu ý rằng CMSClassUnloadingEnabled kết hợp với UseConcMarkSweepGC giúp giữ sạch không gian PermGen, nhưng tùy thuộc vào khung công tác bạn sử dụng, bạn có thể bị rò rỉ thực tế trên PermGen, điều này cuối cùng buộc khởi động lại.
.sbtopts
tệp trong thư mục gốc của dự án SBT của bạn bằng cách sử dụng cú pháp tương tự như trong /usr/local/etc/sbtopts
tệp. Điều này làm cho dự án của bạn trở nên khép kín, có thể rất hữu ích trong các tình huống CI.
Trong phiên bản sbt 12 trở đi, có một tùy chọn cho điều này:
$sbt -mem 2048
Not a valid command: mem (similar: set)
Nếu bạn chạy sbt trên linux shell, bạn có thể sử dụng:
env JAVA_OPTS="-Xmx512m" sbt run
Đây là lệnh thường được sử dụng để chạy dự án sbt của tôi.
override def fork
giải pháp ở trên. (sbt 0.7.7)
.sbtconfig
bắt đầu bằng SBT không được dùng nữa 0.13.6
. Thay vào đó, tôi đã định cấu hình các tùy chọn này /usr/local/etc/sbtopts
theo cách sau:
-J-Xms512M
-J-Xmx3536M
-J-Xss1M
-J-XX:+CMSClassUnloadingEnabled
-J-XX:+UseConcMarkSweepGC
-J-XX:MaxPermSize=724M
-J-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
-J-Xss1M
là một chút thấp đối với các lớp trường hợp lớn, 4M dường như an toàn hơn.
Trong javaOptions += "-XX:MaxPermSize=1024"
build.sbt của chúng tôi như được tham chiếu bởi @iwein ở trên đã hoạt động với chúng tôi khi chúng tôi thấy lỗi java.lang.OutOfMemoryError được tạo ra trong khi chạy kiểm tra Specs2 thông qua sbt.
Biến môi trường là _JAVA_OPTIONS, cần được đặt. Sau khi bạn đặt _JAVA_OPTIONS và khi bạn sbt, sbt sẽ hiển thị thông báo sử dụng JAVA_OPTIONS và các giá trị.
Ngoài ra, bạn có thể đặt javaOption trong tệp sbt hoặc .scala, ví dụ:
javaOptions += "-Xmx1G"
Từ trình bao sbt, bạn có thể chạy chương trình javaOptions để xem các giá trị được đặt.
javaOptions in Test += "-Xmx1G"
Điều này đặt các tùy chọn JVM cho các bài kiểm tra. Cũng hoạt động với jvm forking ( fork in Test := true
).
build.sbt
?
javaOptions in ThisBuild += "-Xmx1G"
hayjavaOptions in (ThisBuild, Test) += "-Xmx1G"
sbt cho phép bạn liệt kê các tùy chọn JVM bạn cần để chạy dự án của mình trên một tệp có tên
.jvmopts
trong thư mục gốc của dự án của bạn. sau đó thêm các tùy chọn java mà bạn muốn
cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M
nó được thử nghiệm và hoạt động trong windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html
javaOptions += "-Xmx1G"