【问题标题】:scala: Error occurred during initialization of VM on Ubuntu 12.04scala:在 Ubuntu 12.04 上初始化 VM 期间发生错误
【发布时间】:2013-08-09 20:42:54
【问题描述】:

我尝试使用 scala 语言的简单示例。 我成功安装了sbt。运行 sbt -h 时,我看到来自 sbt 的帮助消息:

Usage: sbt [options]

  -h | -help         print this message
  -v | -verbose      this runner is chattier
  -d | -debug        set sbt log level to debug
  -no-colors         disable ANSI color codes
  -sbt-create        start sbt even if current directory contains no sbt project
  -sbt-dir   <path>  path to global settings/plugins directory (default: ~/.sbt)
  -sbt-boot  <path>  path to shared boot directory (default: ~/.sbt/boot in 0.11 series)
  -ivy       <path>  path to local Ivy repository (default: ~/.ivy2)
  -mem    <integer>  set memory options (default: 1536, which is -Xms1536m -Xmx1536m -XX:MaxPermSize=384m -XX:ReservedCodeCacheSize=192m) ....

但是当我尝试在带有 scala 作业的目录中运行时(这是 Coursera 课程),我发现了错误:

nazar_art@nazar-desctop:~/scala/example$ sbt
Detected sbt version 0.12.1
Starting sbt: invoke with -help for other options
Error occurred during initialization of VM
Could not reserve enough space for object heap

但它应该打开 sbt 命令提示符。像这样:

shell$ cd /path/to/progfun-project-directory                        # This is the shell of the operating system
shell$ sbt
> _                                                                 # This is the sbt shell

更新:

在我添加以下行之后

java -Xms64M -Xmx256M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=64M -jardirname $0/sbt-launch.jar "$@"

/usr/bin 我看到下一个输出:

nazar_art@nazar-desctop:/usr/bin$ sbt
bash: /usr/bin/sbt: Permission denied
nazar_art@nazar-desctop:/usr/bin$ sudo sbt
sudo: sbt: command not found

- 为什么会这样?
- 如何解决这个问题?

【问题讨论】:

  • 我建议你在 coursera 的课程讨论线程中查找 cmets。如果有人遇到同样的问题,您将在那里获得更多的上下文信息。
  • @Daniel C. Sobral Course 完成了它的存档我不知道 smb 是否可以给出任何答案。

标签: scala error-handling virtual-machine sbt


【解决方案1】:

首先,示例文件夹名称(以及您已安装 sbt 的文件夹名称)不能包含“!”。这可能也适用于其他特殊字符。甚至,我建议将 SBT 安装在路径上没有空间的文件夹中(示例文件夹也是如此)。

例如,如果您已将 SBT(或示例文件夹)安装在如下路径:

/Users/dashti/My Programs/sbt-0.12.1

你可以重新安装它的路径:

/Users/dashti/MyPrograms/sbt-0.12.1

通过应用此命名更改,如果错误消失,请忽略本文的其余部分。

否则,要修复上述错误,首先找到 sbt 可执行脚本,然后对其进行编辑并更正其中的任何问题:

如果您使用的是基于 UNIX 的操作系统,请按照以下步骤操作:

1- 查找 SBT:打开终端并输入以下命令:

which sbt

你会收到这样的路径:

/Users/dashti/Documents/scala-2.10.0/bin/sbt

在这个文件中,有一个执行java程序的命令,比如:

java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=128M -jar `dirname $0`/sbt-launch.jar "$@"

2- 编辑 sbt 脚本:通过在终端中输入此命令:

vim /Users/dashti/Documents/scala-2.10.0/bin/sbt

您将能够编辑此文件,也许您应该将内存使用参数更改为较低的规格(您应该考虑是否有足够的 RAM 来运行 sbt)。例如,这个将是一个更好的选择:

java -Xms64M -Xmx256M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=64M -jar `dirname $0`/sbt-launch.jar "$@"

【讨论】:

  • 我只找到了这一行 - echo "-Xms${mem}m -Xmx${mem}m -XX:MaxPermSize=${perm}m -XX:ReservedCodeCacheSize=${codecache}m"。但是改this line at this function看起来有点奇怪?
  • 你可以将这个“sbt”文件的全部内容替换为:java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=128M -jar dirname $0/sbt-launch .jar "$@"
  • 我可以将.old 添加到当前sbt 文件中并创建一个新的同名且只有一行的文件:java ....
  • 是的,当然。最好从以前的文件创建备份并使用此新内容创建新的可执行文件,但不要忘记使新文件可执行。为简单起见,您最好使用以下命令将当前脚本复制到另一个名称:“cp sbt sbt.backup”,然后使用“vim sbt”编辑当前的 sbt 文件。
  • 我可能想念 smt 我创建了 sbt.backup 并更改了文件内容以更正。但现在sbt 输出看起来 - Error: Unable to access jarfile /usr/bin/sbt-launch.jar。怎么了?
【解决方案2】:

SBT 需要为 JVM 分配更多内存。

这可以在build.sbt:

javaOptions ++= Seq(
    "-Xms64m",
    "-Xmx256M",
    "-XX:+CMSClassUnloadingEnabled",
    "-XX:MaxPermSize=64M"
);

创建一个sbt 文件(无扩展)并运行./sbt 更好,但使用下面的代码(@MohammadDashti 的建议),sbt-launch.jar 需要在项目文件夹中。

java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled \
-XX:MaxPermSize=128M -jar `dirname $0`/sbt-launch.jar "$@"

稍后您可以添加 javaagent:/path/to/jrebel -Drebel.remoting_plugin=true 并使用免费的 JRebel for Scala 许可证在保存时重新部署更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 2017-03-31
    • 2018-11-12
    • 1970-01-01
    • 2011-09-24
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多