2015-11-05 58 views
14

我在我的服务器托管上受到1GB内存的限制。当我想编译一些像git-annex这样的大程序时,Cabal吃了很多内存。有没有办法限制cabalgcl使用一些选项来限制内存使用?限制cabal安装使用的内存?

我更新了一些问题的问题:我正在运行cabal(1.22.4.0)和Ghc 7.10.2关于Webfaction托管(CentOS 7 - 64位),可以访问shell(非root访问)。 Webfaction管理员/机器人通常会因汇编而容忍一些爆发。但Ghc/Cabal需要太多的内存,并花费太多的时间用于某些软件包编译。所以系统会自动杀死所有进程。

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

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

+0

你在使用什么操作系统?你有没有启用交换空间? – ErikR

+3

我认为大多数人都试图在自己的机器上编译并运行二进制代码 - 也许这是一个选项? – Carsten

+3

如果一切都失败了,我会在我自己的PC上使用与服务器相同的(-ish)操作系统在本地创建一个虚拟机,在本地编译所有内容,并将所有内容上传到服务器。由于GHC静态链接大部分内容,因此上载本地编译的二进制文件甚至可能无需定制本地虚拟机即可运行。 – chi

回答

2

编辑:文章是不清楚真正的问题,所以忽略,因为它与其他的心事写这个答案,但有一些有用的意见。我认为,如果你将Cabal或GHC的内存消耗限制在1GB以内,由于Linux内存卫士提前终止(或者别人称之为 - 有人请吗?),你会开始得到很多失败的版本。如果你找到一种方法说服Cabal本身减少记忆力,并说服GHC减肥,情况可能并非如此。

我就遇到了这个刚刚而只交换空间1GB 1GB的虚拟机上建立咖喱KiCS2。 (当然,我的目标不是要限制内存消耗,而是让该死的东西来完成的建筑,所以我所做的就是增加虚拟内存到4GB,并交换至8GB,但是这显然不是你以后)。

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

尽管明亮的头脑可能证明我错了。

+0

好吧,事实上,当我说我的托管提供了限制内存时,这是因为内存卫士会在一定时间内杀死任何进程,而这些进程在一定的时间内吃得更多。虚拟机是不可能的,因为我不是root。唯一的办法是ghc的标志,但我不知道它。关于这一点有什么想法? – reyman64

+0

不是,它是一个正在吹GHC的特定.hs文件吗?如果你单独编译它? –

+0

噢,你说你可以超过限制,但只有在短时间爆发而不超过n秒?然后,您可以在达到某个阈值时定期暂停和恢复编译过程。但是这需要一些不平凡的但不是不可能的脚本。如果您可以确定是这种情况,那么您可以将其作为另一个问题发布或修改此问题。 –