VirtualBox下CentOS编译sbt出现Killed错误求助(Windows环境正常)
解决VirtualBox中CentOS编译sbt时出现的"Killed"错误
我之前处理过类似的问题,你遇到的这个/usr/share/sbt/bin/sbt-launch-lib.bash: line 58: 4341 Killed "$@"错误,在Linux环境下绝大多数情况是系统内存不足导致的——VirtualBox默认给虚拟机分配的内存通常不高,而sbt编译带Play框架、Gatling依赖的Scala项目需要不少内存资源,OOM Killer(系统的内存不足进程终止机制)会主动杀掉占用过高内存的sbt进程,这也是为什么你在Windows本地能正常运行的原因(本地内存充足)。
下面是几个可行的解决方案,按优先级推荐:
1. 直接给虚拟机加内存(最有效)
这是解决这类问题最直接的方式:
- 先关掉你的CentOS虚拟机
- 打开VirtualBox,选中你的CentOS实例,点击「设置」→「系统」→「主板」
- 把基础内存调到2GB以上(如果主机内存够,给4GB会让编译流畅很多)
- 重启虚拟机,再试试
sbt compile
2. 调整sbt的JVM内存参数
如果暂时没法加虚拟机内存,可以通过限制sbt的内存占用或者合理分配堆内存来解决:
- 在用户目录下创建或修改
sbtopts配置文件(只对你当前用户生效):
这里touch ~/.sbtopts echo "-Xmx1024m" >> ~/.sbtopts echo "-XX:MaxMetaspaceSize=512m" >> ~/.sbtopts-Xmx1024m是设置最大堆内存为1GB,MaxMetaspaceSize是设置元空间大小为512MB,你可以根据虚拟机的实际内存情况调整数值。 - 要是想对所有用户生效,就修改
/etc/sbt/sbtopts文件,内容一样。
3. 启用Swap分区缓解内存压力
如果虚拟机内存实在没法调高,那就给系统加个Swap分区当“虚拟内存”用:
- 先看看当前Swap状态:
free -h - 创建一个临时的2GB Swap文件(重启虚拟机后会失效,要永久生效的话得改
/etc/fstab):
做完这些再运行sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfilesbt compile试试。
4. 升级sbt到较新稳定版
你的sbt版本是1.1.0,虽然和Scala 2.12.4兼容,但新版本的sbt在内存优化上有不少改进,升级试试:
- 先卸载旧版本:
sudo yum remove sbt - 重新安装最新稳定版:
安装完用curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo sudo yum update sudo yum install sbtsbt sbtVersion确认下版本。
5. 清理sbt缓存试试
有时候缓存损坏也会导致奇怪的编译错误,清理缓存后重新编译:
rm -rf ~/.sbt ~/.ivy2/cache
然后重新执行sbt compile,它会重新下载依赖并编译。
另外,你可以在编译前先开个htop命令监控内存使用,看看编译过程中内存是不是快占满了,这样能更确定是不是内存的问题。
内容的提问来源于stack exchange,提问作者donuts
相关产品推荐
相关产品推荐

