1. 故障排除内存问题

故障排除内存问题 

sbt 有时可能会耗尽内存,导致崩溃或性能严重下降。sbt 需要多少内存取决于构建中的子项目数量和启用的插件。对于内存占用很大的项目,可能需要使用更大的 Java 堆大小启动 sbt。默认的 Java 堆大小为 1GB。要将其增加到 2GB,可以运行以下命令

sbt -J-Xmx2G

任何以 -J 开头的命令行参数都被解释为 Java VM 参数。要在项目中自动将堆大小增加到 2GB,请创建或编辑文件 .sbtopts 并添加一行包含 -J-Xmx2G 的内容。

当 sbt 在交互模式下或作为服务器运行时(即它使用 sbt --clientsbtn 启动),构建中的每个任务都必须清理其所有资源,否则 sbt 的内存占用可能会随着时间的推移而增加。例如,如果 run 任务启动了 Akka ActorSystem,则必须在 run 退出之前关闭 ActorSystem,否则每次调用 run 时,sbt 进程的内存使用率都会增加。

为了修复内存泄漏,有必要找出哪些类在内存中的持久时间超过预期。最简单的方法是使用 jmap 命令(由 jdk 提供)和一个 JVM 内存分析工具,例如 VisualVM。使用 ps 命令查找要调试的 sbt 进程的进程 ID。然后运行 jmap -dump:format=b,file=leak.hprof $SBT_PID。在 VisualVM 中打开 leak.hprof 文件。可能很明显哪些类占用了最多的内存,但有时需要单击“计算保留大小”按钮。如果堆很大,这可能需要一段时间,但它可以识别哪些类占用了最多的内存。通常这将有助于识别是否存在已泄漏的线程或未清除的缓存。