SBT 在内存耗尽时被杀死

spy*_*don 3 scala sbt docker

我试图在具有 800MB RAM 的 Docker 容器中运行我的 scala 应用程序,( docker run -m=800m mindlevel) 但它在编译完成之前就被杀死了。

[info] Compiling 10 Scala sources to /root/mindlevel-backend/target/scala-2.12/classes...
[info] 'compiler-interface' not yet compiled for Scala 2.12.1. Compiling...
[info]   Compilation completed in 8.631 s
/usr/local/sbt/bin/sbt-launch-lib.bash: line 58:    57 Killed                  "$@"
Run Code Online (Sandbox Code Playgroud)

我尝试通过以下方式限制 SBT 堆:

CMD ["sbt", "-mem", "700", "run"]
Run Code Online (Sandbox Code Playgroud)

但它仍然在同一个地方被杀死。对 docker 容器没有任何限制,它运行良好。当在 EC2 微型实例(1GB RAM)中运行它时,它也会崩溃,无论是否有 SBT 和 Docker 的限制。

我缺少一些限制吗?

spy*_*don 5

为了让它在小于 1GB 的堆上运行,我预编译了该项目,用sbt assembly它制作了一个与您的项目和所有依赖项一起打包的 jar。

通过添加以下内容来安装它:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.5")
Run Code Online (Sandbox Code Playgroud)

project/assembly.sbt

然后生成 jar,用sbt assembly它来放置 jar./target/scala-<VERSION>/<PROJECT>-assembly-1.0.jar

然后只需使用以下命令运行您的项目:

scala target/scala-<VERSION>/<PROJECT>-assembly-1.0.jar
Run Code Online (Sandbox Code Playgroud)

由于在低内存实例上不需要编译步骤,因此即使内存低于建议的内存,许多项目也将能够运行。