如何限制Haskell线程的内存使用量

时间:2011-09-04 05:54:13

标签: memory haskell ghc

在用GHC编译的Haskell程序中,是否有可能以编程方式防止过多的内存使用?也就是说,让它在内存使用量达到指定限制时通知程序,最好指示有问题的线程。

例如,假设我想编写一个服务器,托管脚本语言解释器,用户可以连接到该服务器。这是Turing-complete,所以程序理论上可以使用无限的内存或时间。假设每个客户端都使用单独的线程进行处理。如果客户端写入一个非常快速消耗内存的无限循环,我想确保该线程在被异常警告之前消耗的内存不超过1 MB。发生这种情况时,我不希望其他用户受到影响。

这可能是使用单独的流程和ulimit,但是:

  • 我宁愿将其保留在一个程序中,以避免进程间通信的复杂性。

  • 我需要支持Linux和Windows,所以如果可能的话,我宁愿保持与平台无关。

3 个答案:

答案 0 :(得分:3)

Edward Z. Yang和DavidMazières开发了GHC扩展,支持动态资源限制,并在http://ezyang.com/rlimits.html进行讨论。他们还提供支持此版本的GHC 7.8版本。

不幸的是,他们的工作没有被纳入GHC上游。

答案 1 :(得分:2)

可能不是你想要的。但是,正如文档here所示,您有一个ghc编译选项: -Ksize 更新:哎呀,对不起,-K是堆栈溢出。不过,您可以查看该链接。

答案 2 :(得分:2)

在您的示例中,您可能需要修改脚本语言解释器的来源,对内存管理进行一些修改。模块,当然,如果它有一些托管内存分配功能,解释器可以通过API回调到主机应用程序来抱怨内存配额的过度使用。