Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 限制阴谋集团安装使用的内存?_Haskell_Ghc_Cabal_Cabal Install_Memory Consumption - Fatal编程技术网

Haskell 限制阴谋集团安装使用的内存?

Haskell 限制阴谋集团安装使用的内存?,haskell,ghc,cabal,cabal-install,memory-consumption,Haskell,Ghc,Cabal,Cabal Install,Memory Consumption,我的主机服务器上有1GB的内存限制。当我想编译一些大程序时,比如git附件,阴谋集团会消耗大量内存。有没有办法限制cabal或gcl使用某些选项来限制内存使用 我用一些细节更新了这个问题:我正在Webfaction主机(CentOS 7-64位)上运行cabal(1.22.4.0)和Ghc7.10.2,可以访问shell(非根访问)。由于编译的原因,WebPaction admin/robot通常会容忍一些突发事件。但是Ghc/Cabal需要太多的内存,并且花费太多的时间来编译特定的包。所以系统

我的主机服务器上有1GB的内存限制。当我想编译一些大程序时,比如
git附件
,阴谋集团会消耗大量内存。有没有办法限制
cabal
gcl
使用某些选项来限制内存使用

我用一些细节更新了这个问题:我正在Webfaction主机(CentOS 7-64位)上运行
cabal
(1.22.4.0)和
Ghc
7.10.2,可以访问shell(非根访问)。由于编译的原因,WebPaction admin/robot通常会容忍一些突发事件。但是
Ghc
/
Cabal
需要太多的内存,并且花费太多的时间来编译特定的包。所以系统会自动终止所有进程

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


我的主要目标是,无论花多长时间,汇编最终都会成功。

编辑:这篇文章不清楚真正的问题,所以忽略这个答案,因为它是在考虑其他问题的情况下写的,但有一些有用的评论

我认为,如果你从外部将Cabal或GHC的内存消耗限制在1GB,你将开始获得大量失败的构建,因为Linux内存保护程序(或者不管它叫什么,请找个人?)会提前终止。如果你找到一种方法说服阴谋集团自己使用更少的记忆,并说服GHC节食,情况可能就不是这样了

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

因此,我认为GHC在编译过程中消耗大量内存可能没有解决办法。但要确保并行编译已关闭。而研究意味着通过编译标志(可能是GHC本身)或关闭可能消耗大量内存的优化阶段等来减少GHC的内存消耗


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

@reyman64的建议证实了我在使用2GB内存的Xubuntu 18.04上的工作。谢谢 因此,
cabal install-v cabal install
挂起系统。以下工作很好:

cabal安装-v--ghc选项='+RTS-M1G-RTS'cabal安装

您使用的是什么操作系统?您是否启用了任何交换空间?我认为大多数人都会尝试在自己的机器上编译并发送二进制文件-也许这是一个选项?如果其他所有操作都失败,我会在自己的PC上本地创建一个VM,使用与服务器中相同的(-ish)操作系统,在本地编译所有内容,然后将所有内容上载到服务器。由于GHC静态链接大多数内容,因此上传本地编译的二进制文件甚至可以在不需要自定义本地VM的情况下工作。但是,对于如何限制单个进程的内存使用有很多建议。也许,你可以看看这是否有帮助。好吧,事实上,当我说我的主机提供有限内存时,这是因为内存保护会杀死任何在一定时间内消耗更多的进程。。VM不可能,因为我不是root。唯一的办法是ghc的旗帜,但我不知道。关于这一点有什么想法吗?没有,是不是某个.hs文件导致GHC崩溃?如果你单独编译它?哦,你是说你可以超过限制,但只能在短时间内,并且不能超过n秒?然后,当编译过程达到某个阈值时,您可以暂停并定期恢复编译过程。但这需要一些不平凡但并非不可能的脚本。如果你能确定是这样的话,你可以把它作为另一个问题发布或修改这个问题。是的,这正是发生的事情:-/我在网上看到了一个选项,但我不明白我是否可以在我的案例中使用,你对此有何看法:
cabal安装--ghc选项=“+RTS-M400m”
?我在这里找到了一些其他信息,但确实很难理解:@reyman64如果您尝试使用
+RTS
,请确保包含
-RTS
,以便它可以与其他选项交错,如
--ghc options='+RTS-M400m-RTS'
。我不知道这是否真的能满足你们的要求——例如,这取决于GHC是在RTS开启的情况下构建的——但这听起来很有希望。