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

时间:2008-10-10 20:07:09

标签: windows memory

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

我希望能够像Linux上的/ etc / limits那样做 - 例如设置M90(为单个用户设置90%的最大内存来分配)。因此,无论如何,系统都会获得剩余的10%。

4 个答案:

答案 0 :(得分:36)

使用Windows Job Objects。作业就像进程组一样,可以限制内存使用和进程优先级。

答案 1 :(得分:23)

使用Microsoft的Application Verifier (AppVerifier)工具。

在我的情况下,我需要模拟内存不再可用,所以我在工具中执行了以下操作:

  1. 添加了我的申请
  2. 未选中基本
  3. 检查低资源模拟
    • 将TimeOut更改为120000 - 我的应用程序将在任何生效之前正常运行2分钟。
    • 将HeapAlloc更改为100 - 100%的堆分配错误概率
    • 将Stacks设置为true - 堆栈将无法增长任何更大的
  4. 保存
  5. 启动我的申请
  6. 2分钟后,我的程序无法再分配新的内存,我能够看到所有内容的处理方式。

答案 2 :(得分:4)

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

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

SetProcessWorkingSetSize Function

答案 3 :(得分:3)

我知道没办法做到这一点,虽然如果有人有一个好的答案,我很好奇。我一直在考虑将这样的东西添加到我公司制作的其中一个应用程序中,但是找不到好办法。

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

工作集很好(Job Objects也控制工作集),但这不是总内存使用量,而是任何时候只有实际内存使用量(分页)。它可能适用于你想要的东西,但是afaik它不会限制总的分配内存。