memory - killer - 容器oom




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

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

不幸的是,他们的工作没有包括在GHC上游。

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

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

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

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

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


可能不是你想要的。 但是,如此处所述您有一个ghc编译选项: -Ksizeupdate:糟糕,抱歉,-K用于堆栈溢出。 不过,你可以查看该链接。





ghc