【问题标题】:Cabal install criterion out of memoryCabal安装标准内存不足
【发布时间】:2017-09-11 01:41:11
【问题描述】:

我在具有 768MB 内存和 512MB 交换空间的容器上运行。我不能增加这两个。 cabal install criterion 总是给

Failed during the building phase.
The exception was: ExitFailure (-9)
This may be due to an out-of-memory condition.

Compiling Criterion.Types 期间。有什么办法可以解决这个问题,还是我必须在没有标准的情况下凑合?

【问题讨论】:

  • 尝试在 GHC 上设置 RTS 标志以限制其内存使用 (--ghc-options="+RTS -M600M") 并避免并行运行多个作业 (-j1)。
  • 谢谢!如果您将其写为答案,我会接受
  • 真的有用吗?!
  • 就像一个魅力:)

标签: haskell memory installation cabal criterion


【解决方案1】:

在 GHC 上设置 RTS 标志以限制其内存使用 (--ghc-options="+RTS -M600M") 并避免并行运行多个作业 (-j1)。

【讨论】:

  • 这似乎让我进一步尝试 cabal install cabal-install(试图从 2.4 升级到 3.4),但现在抛出此错误:ghc:panic! (“不可能”发生了)(用于 x86_64-unknown-linux 的 GHC 版本 8.6.5):堆溢出
  • @marcel_g 在具有 1GB RAM 的 EC2 实例上运行时遇到了同样的问题。你找到解决办法了吗?
  • @DavidAzar - 我确实找到了解决方案。我将在下面的答案中发布我的粗略笔记。
【解决方案2】:

回答@DavidAzar 对答案的评论:

@Li-yaoXia 的解决方案有效,但后来我遇到了更多问题。这一切都来自我在解决问题时的粗略笔记。所以可能会有更精简的解决方案。

好吧,实际上它编译了所有内容,但 cabal --version 仍然说 2.4,而不是 3.4。也许它不在路径中?

Warning: could not create a symlink in /root/.cabal/bin for cabal because 
the file exists there already but is not managed by cabal. You can create a symlink for 
this executable manually if you wish. The executable file has been installed at /root/.cabal/bin/cabal

这里似乎有一个解决方案:https://stackoverflow.com/a/17030330/52236 但我必须弄清楚如何删除现有的符号链接,然后再重新安装 cabal 并重新进行重新编译过程。

这里也有这个解决方案,我先试试: updating cabal-install, but version is not changed

  • 从 bash 运行 unminimize,它将所有正常的东西安装到 ubuntu。

  • 首先,在 /bin 中,创建一个名为 /cabal-old 的文件夹,然后将 cabal 可执行文件复制到 cabal-old 文件夹中。然后从 /bin 文件夹中删除 cabal。

  • 然后创建一个指向新 cabal 可执行文件的新符号链接:

    ln -s /root/.cabal/bin/cabal cabal

  • 这会在执行 cabal --version 时显示 cabal 3.4。

  • 接下来,安装 git:apt-get install git

  • 然后进入plutus-pioneer-program/code/week01/文件夹输入cabal build

  • 这会从 git 下载很多东西,然后失败。

    警告:请求的索引状态 2021-02-24T00:00:00Z 比 'hackage.haskell.org'!回退到旧状态 (2021-02-23T23:53:53Z)。 解决依赖关系...cabal:无法解决依赖关系: [__0] 尝试:Win32-network-0.1.0.0(用户目标) [__1] 尝试:base-4.12.0.0/installed-4.12.0.0(Win32-network的依赖) [__2] 下一个目标:plutus-pioneer-program-week01(用户目标) [__2] 拒绝:plutus-pioneer-program-week01-0.1.0.0 (冲突:base==4.12.0.0/installed-4.12.0.0,plutus-pioneer-program-week01 =>base^>=4.14.1.0) [__2] 失败(回跳,冲突集:base,plutus-pioneer-program-week01)

    在彻底搜索了依赖树的其余部分之后,这些是 我最难实现的目标:base、Win32-network、plutus-pioneer-program-week01

  • 我从 Stackoverflow 上的某个人那里得到了一个建议,即 Plutus-Pioneer 代码可能需要 ghc 8.10,而我使用的是 8.6.5,所以下一步是弄清楚如何更新它。

  • 在获得 ghc 8.10 之前,我显然需要安装 ghcup, 以非root用户身份运行?:

    curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org |嘘

  • 这开始了安装,但由于我没有安装“make”而失败。运行这个:

    apt-get install make

  • 然后重新运行 curl 命令。 curl 安装程序输出显示正在安装 ghc 8.10,但完成后,ghc --version 仍然输出 8.6.5。另一个符号链接问题?

  • 我在输出中发现了这个问题:

    为了运行 ghc 和 cabal,您需要调整 PATH 变量。 你可能想在你的 shell 中获取 '/root/.ghcup/env' 执行此操作的配置(例如 ~/.bashrc)。

  • 还可能需要弄清楚如何指定要使用的 ghc 版本。

  • 我需要更新 bin 文件夹中的 simlink 以获得正确版本的 ghc 正在使用,还有以下其他链接需要更新:

lrwxrwxrwx 1 root root   9 Mar 24  2020 ghc -> ghc-8.6.5
-rwxr-xr-x 1 root root 226 Mar 24  2020 ghc-8.6.5  
lrwxrwxrwx 1 root root  13 Mar 24  2020 ghc-pkg -> ghc-pkg-8.6.5
-rwxr-xr-x 1 root root 258 Mar 24  2020 ghc-pkg-8.6.5  
lrwxrwxrwx 1 root root  10 Mar 24  2020 ghci -> ghci-8.6.5
-rwxr-xr-x 1 root root  55 Mar 24  2020 ghci-8.6.5

首先,为 ghcup 创建一个新的符号链接:

ln -s /root/.ghcup/bin/ghcup ghcup

(虽然我不记得我需要 ghcup 是为了什么。)

  • 接下来,更新 /bin 文件夹中上面列出的所有 3 个符号链接的 ghc 符号链接:

    mv -T ghc ghc-old-link ln -s /root/.ghcup/bin/ghc ghc

  • 这有助于在 bash shell 中显示较新版本的 ghc。

  • 现在尝试构建,它下载并开始构建很多东西,但现在发生了这个错误:

    cabal:无法构建 cborg-0.2.4.0(这是由 plutus-pioneer-program-week01-0.1.0.0)。构建过程被终止(即 SIGKILL)。 造成这种情况的典型原因是没有足够的内存 可用(例如操作系统杀死了一个使用大量内存的进程)。

解决方案: Docker -> 首选项 -> 资源 -> 增加 RAM 和交换空间。在我的例子中,内存为 2-8GB,交换空间为 1 到 2GB。

现在它为第 1 周构建 Plutus Pioneer 代码。

【讨论】:

  • 感谢您抽出宝贵时间回复。尝试了其中一些并取得了进展,但最终解决问题的是获得更大的 EC2 盒子。我测试了一对,最终得到了一个 16GB 的 t2.xlarge,没有任何问题。我试图编译的软件需要一个更强大的服务器来运行,但它的文档已经过时了......
  • 是的,我认为最终对我来说与众不同的是@Li-yao Xi 的解决方案以及增加我的 Docker 实例的 RAM 和交换空间。
猜你喜欢
  • 2013-08-24
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多