18

我的服务器托管受到 1GB 内存的限制。当我想编译一些大程序git-annex时,Cabal 会占用大量内存。有没有办法限制cabalgcl使用某些选项来限制内存使用?

我用一些细节更新了问题:我在 Webfaction 主机(CentOS 7 - 64 位)上运行cabal(1.22.4.0)和Ghc7.10.2,可以访问 shell(非 root 访问)。Webfaction 管理员/机器人通常会因编译而容忍一些突发。但是Ghc/Cabal需要太多的内存并且花费太多的时间来编译某些包。所以系统会自动杀死所有进程。

我需要多次重新启动编译才能最终获得成功的结果。

我的主要目标是编译以成功结束,无论需要多长时间。

4

2 回答 2

4

@reyman64 建议已确认可在具有 2GB 内存的 Xubuntu 18.04 上运行。谢谢!所以,cabal install -v cabal-install挂起系统。以下工作正常:

cabal install -v --ghc-options='+RTS -M1G -RTS' cabal-install
于 2020-02-05T08:51:45.000 回答
2

编辑:该帖子不清楚真正的问题,因此请忽略此答案,因为它是在考虑其他内容的情况下编写的,但有一些有用的评论。

我认为,如果您从外部将 Cabal 或 GHC 的内存消耗限制为 1GB,由于 Linux 内存保护(或任何所谓的 - 有人,拜托?)提前终止,您将开始获得许多失败的构建。如果您找到一种方法来说服 Cabal 自己使用更少的内存,并说服 GHC 也开始节食,情况可能并非如此。

我最近在一个只有 1GB 交换空间的 1GB 虚拟机上构建 Curry KiCS2 时遇到了这个问题。(当然我的目标不是限制内存消耗,而是让该死的东西完成构建,所以我所做的只是将 VM 内存增加到 4GB 并交换到 8GB,但这显然不是你想要的。)

所以我认为 GHC 在编译期间消耗大量内存可能没有解决方法。只需确保关闭并行编译即可。研究意味着通过编译标志(可能是 GHC 本身的)来减少 GHC 的内存消耗,或者关闭可能消耗大量内存的优化阶段等。

不过,更聪明的头脑可能会证明我错了。

于 2015-11-05T14:20:23.193 回答