设置Windows进程(或用户)的内存限制

是否有任何方法来设置一个进程可以在Windows XP中使用的系统内存限制? 我有几个不稳定的应用程序在大部分时间都可以正常工作,但可能会遇到一个导致在几秒钟内吃掉整个内存的错误(或者至less我认为是这样)。 这导致硬重置,因为Windows完全没有响应,我失去了我的工作。

我想能够在Linux上执行类似于/ etc / limits的设置 – 比如设置M90(设置单个用户分配的最大内存的90%)。 所以无论如何,系统都会得到剩下的10%。

使用Windows 作业对象 。 作业就像进程组,可以限制内存使用量和进程优先级。

使用Microsoft的应用程序validation程序(AppVerifier)工具。

在我的情况下,我需要模拟内存不再可用,所以我做了以下工具:

  1. 加了我的申请
  2. 未经检查的基本
  3. 检查低资源仿真
    • 更改TimeOut到120000 – 我的应用程序将正常运行2分钟,然后才能生效。
    • 将HeapAlloc更改为100 – 100%的堆分配错误
    • 将Stacks设置为true – 堆栈将不能增大
  4. 保存
  5. 开始我的申请

2分钟后,我的程序不能再分配新的内存,我可以看到如何处理一切。

根据您的应用程序,限制语言解释器使用的内存可能会更容易。 例如,使用Java,您可以设置JVM将被分配的RAM数量。

否则,可以使用Windows API为每个进程设置一次

SetProcessWorkingSetSize函数

没有办法做到这一点,我知道,虽然我很好奇,如果任何人有一个很好的答案阅读。 我一直在考虑将这样的东西添加到我的公司构build的应用程序之一,但没有find好办法。

我能想到的一件事(尽pipe不是直接点)是我相信你可以限制在Windows中的COM +应用程序的总内存使用量。 这需要将应用程序编写成在COM +中运行,当然,这是我所知道的最接近的方式。

工作集的东西是好的(作业对象也控制工作集),但这不是总的内存使用情况,只有真正的内存使用(分页)在任何时候。 它可以为你想要的,但它不限制总分配的内存。