我的应用程序执行大数据数组处理,并且需要比JVM默认提供的内存更多的内存.我在Java中知道它是由"-Xmx"选项指定的.如何设置SBT以使用特定的"-Xmx"值来运行具有"运行"操作的应用程序?
iwe*_*ein 109
对于分叉进程,您应该查看Build.scala
要修改分叉进程的java选项,您需要在Build.scala(或任何您命名的构建)中指定它们,如下所示:
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
Run Code Online (Sandbox Code Playgroud)
这会给你正确的选项,而全球范围内修改JAVA_OPTS,并且它将把自定义JAVA_OPTS在SBT生成启动脚本
对于非分叉进程,通过sbtopts或sbtconfig根据您的sbt版本设置配置是最方便的.
由于sbt 0.13.6 .sbtconfig已被弃用./usr/local/etc/sbtopts按以下方式修改:
-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
Run Code Online (Sandbox Code Playgroud)
您还可以使用与.sbtopts文件中相同的语法在SBT项目的根目录中创建/usr/local/etc/sbtopts文件.这使得项目自成一体.
在sbt 0.13.6之前,您可以在.sbtconfig中为非分叉进程设置选项:
检查sbt的位置:
$ which sbt
/usr/local/bin/sbt
Run Code Online (Sandbox Code Playgroud)看看内容:
$ 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 "$@"
Run Code Online (Sandbox Code Playgroud)设置正确的jvm选项以防止OOM(常规和PermGen):
$ cat ~/.sbtconfig
SBT_OPTS="-Xms512M -Xmx3536M -Xss1M
-XX:+CMSClassUnloadingEnabled
-XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"
Run Code Online (Sandbox Code Playgroud)如果你只想为当前的sbt运行设置SBT_OPTS,你可以env SBT_OPTS=".." sbt按照Googol Shan的建议使用.或者您可以使用Sbt 12中添加的选项:sbt -mem 2048.对于较长的选项列表,这会变得难以处理,但如果您有不同需求的不同项目,它可能会有所帮助.
请注意,与UseConcMarkSweepGC一致的CMSClassUnloadingEnabled有助于保持PermGen空间的清洁,但是根据您使用的框架,您可能会在PermGen上出现实际泄漏,这最终会导致重新启动.
scr*_*des 65
在sbt版本12之后,有一个选项:
$sbt -mem 2048
Run Code Online (Sandbox Code Playgroud)
Goo*_*han 42
如果你在linux shell上运行sbt,你可以使用:
env JAVA_OPTS="-Xmx512m" sbt run
Run Code Online (Sandbox Code Playgroud)
这是我常用的命令来运行我的sbt项目.
omn*_*nom 22
.sbtconfig从SBT开始不推荐使用0.13.6.相反,我/usr/local/etc/sbtopts按以下方式配置了这些选项:
-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
Run Code Online (Sandbox Code Playgroud)
Arn*_*rne 16
试试这个:
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)
})
}
Run Code Online (Sandbox Code Playgroud)
使用JAVA_OPTS进行环境变量设置.
使用-JX选项为各个选项设置sbt,例如-J-Xmx2048 -J-XX:MaxPermSize = 512
较新版本的sbt具有"-mem"选项.
我知道有一种方法.设置环境变量JAVA_OPTS.
JAVA_OPTS='-Xmx512m'
Run Code Online (Sandbox Code Playgroud)
我还没有找到一种方法来执行此命令参数.
小智 5
在javaOptions += "-XX:MaxPermSize=1024"用如上述对我们工作时,我们看到,同时通过SBT运行Specs2测试抛出java.lang.OutOfMemoryError @iwein引用我们build.sbt。
| 归档时间: |
|
| 查看次数: |
80846 次 |
| 最近记录: |