我的服务器托管受到1GB内存的限制。当我想编译诸如git-annex
之类的大程序时,Cabal占用了大量内存。是否可以使用某些选项限制内存使用量来限制cabal
或gcl
?
我更新了一些细节的问题:我正在Webfaction托管(CentOS 7-64位)上运行cabal
(1.22.4.0)和Ghc
7.10.2,可以访问shell(非root用户访问权限)。 Webfaction管理员/机器人通常可以容忍由于编译而导致的突发事件。但是Ghc
/ Cabal
需要太多的内存,并且花费太多的时间进行某些程序包的编译。因此,系统会自动终止所有进程。
我需要多次重新启动编译才能最终获得成功的结果。
我的主要目标是编译以成功而告终,无论它花多长时间。
@ reyman64建议已确认可在具有2GB内存的Xubuntu 18.04上使用。谢谢!因此,cabal install -v cabal-install
挂起系统。以下工作正常:
cabal install -v --ghc-options='+RTS -M1G -RTS' cabal-install
编辑:帖子尚不清楚真正的问题,因此请忽略此答案,因为它是在写其他想法的同时,但有一些有用的评论。
[我认为,如果从外部将Cabal或GHC的内存消耗限制为1GB,则由于Linux内存保护程序(或所谓的有人,请有人吗?)而提前终止,您将开始获得很多失败的构建。如果您找到一种方法说服Cabal自己使用更少的内存并说服GHC也节食,则可能不是这种情况。
我最近在只有1GB交换空间的1GB虚拟机上构建Curry KiCS2时遇到了这个问题。 (当然,我的目标不是限制内存消耗,而是要完成该死的事情,所以我要做的就是将VM内存增加到4GB并交换到8GB,但这显然不是您要的。)
因此,我认为在编译过程中,GHC可能不会存在消耗大量内存的解决方法。只要确保并行编译已关闭即可。研究意味着通过(可能是GHC本身的)编译标志来减少GHC的内存消耗,或者关闭可能消耗大量内存的优化阶段,等等。
但是,更聪明的想法可能证明我错了。