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 程序的記憶體使用量都會增加。

為了修復記憶體洩漏,必須找出哪些類別在記憶體中保留的時間超出預期。最簡單的方法是使用 JDK 提供的 jmap 命令和 JVM 記憶體分析工具(如 VisualVM)。使用 ps 命令找出要偵錯的 sbt 程序的程序 ID。然後執行 jmap -dump:format=b,file=leak.hprof $SBT_PID。在 VisualVM 中開啟 leak.hprof 檔案。哪些類別佔用最多記憶體可能很明顯,但有時需要按一下「計算保留大小」按鈕。如果堆積很大,這可能需要一段時間,但它可以識別哪些類別佔用最多記憶體。通常,這將有助於您識別是否有執行緒洩漏或快取未被清除。