【发布时间】:2011-09-04 05:54:12
【问题描述】:
在使用 GHC 编译的 Haskell 程序中,是否可以以编程方式防止过度使用内存?也就是说,让它在内存使用量达到指定限制时通知程序,最好是指示有问题的线程。
例如,假设我想编写一个服务器,托管一个脚本语言解释器,用户可以连接到该服务器。它是图灵完备的,因此程序理论上可以使用无限的内存或时间。假设每个客户端都由一个单独的线程处理。如果客户端编写了一个非常快速地消耗内存的无限循环,我想确保线程消耗的内存不超过 1 MB,然后才会收到异常警报。当这种情况发生时,我不希望其他用户受到影响。
这可能使用单独的进程和ulimit,但是:
我宁愿将其保留在一个程序中,以避免进程间通信的复杂性。
我需要同时支持 Linux 和 Windows,所以如果可能的话,我希望它与平台无关。
【问题讨论】:
-
我认为使用RTS options 可以做到这一点。
-M选项看起来特别有希望,但我不确定它本身是否足够。 -
我在当前项目中遇到了同样的问题。有一个related question 的答案建议计算分配,但我觉得它并不令人满意——如果可能的话,我想直接限制实时内存集。
-
AFAIK,没有为单个线程定义内存消耗,只有进程。