【问题标题】:SBT killed when running out of ramSBT在用完ram时被杀死
【发布时间】:2018-01-24 03:07:54
【问题描述】:

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

[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                  "$@"

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

CMD ["sbt", "-mem", "700", "run"]

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

我缺少一些限制吗?

【问题讨论】:

  • scala 编译器使用大量内存,仅 JVM 至少需要 1G。整个实例只有 1GB 的 EC2 实例也不够用。
  • @engineerC 它确实可以在不到 1GB 的情况下运行它,但只是没有在实例上进行编译。

标签: scala docker sbt


【解决方案1】:

为了让它在小于 1GB 的堆中运行,我使用 sbt assembly 预编译了项目,这会生成一个与您的项目和所有依赖项一起打包的 jar。

通过添加安装它:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.5")

project/assembly.sbt

然后使用sbt assembly 生成jar,这会将jar 放入./target/scala-<VERSION>/<PROJECT>-assembly-1.0.jar

然后只需运行您的项目:

scala target/scala-<VERSION>/<PROJECT>-assembly-1.0.jar

由于在低内存实例上不需要编译步骤,因此即使内存比推荐的少,许多项目也可以运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-06
    • 2011-09-09
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2020-10-23
    • 2019-11-17
    • 1970-01-01
    相关资源
    最近更新 更多