3

我在具有 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。有什么办法可以解决这个问题,还是我必须在没有标准的情况下凑合?

4

2 回答 2

9

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

于 2017-09-11T04:46:12.063 回答
1

回答@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 并重新进行重新编译过程。

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

  • unminimize从 bash跑出来,它将所有正常的东西安装到 ubuntu。

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

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

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

  • 这让 cabal 3.4 在执行 cabal --version 时出现。

  • 接下来,安装 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 安装

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

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

    为了运行 ghc 和 cabal,您需要调整 PATH 变量。您可能希望在您的 shell 配置中使用 source '/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 代码。

于 2022-01-18T05:44:26.513 回答