设置Windows进程(或用户)的内存限制
是否有任何方法来设置一个进程可以在Windows XP中使用的系统内存限制? 我有几个不稳定的应用程序在大部分时间都可以正常工作,但可能会遇到一个导致在几秒钟内吃掉整个内存的错误(或者至less我认为是这样)。 这导致硬重置,因为Windows完全没有响应,我失去了我的工作。
我想能够在Linux上执行类似于/ etc / limits的设置 – 比如设置M90(设置单个用户分配的最大内存的90%)。 所以无论如何,系统都会得到剩下的10%。
使用Windows 作业对象 。 作业就像进程组,可以限制内存使用量和进程优先级。
使用Microsoft的应用程序validation程序(AppVerifier)工具。
在我的情况下,我需要模拟内存不再可用,所以我做了以下工具:
- 加了我的申请
- 未经检查的基本
- 检查低资源仿真
- 更改TimeOut到120000 – 我的应用程序将正常运行2分钟,然后才能生效。
- 将HeapAlloc更改为100 – 100%的堆分配错误
- 将Stacks设置为true – 堆栈将不能增大
- 保存
- 开始我的申请
2分钟后,我的程序不能再分配新的内存,我可以看到如何处理一切。
根据您的应用程序,限制语言解释器使用的内存可能会更容易。 例如,使用Java,您可以设置JVM将被分配的RAM数量。
否则,可以使用Windows API为每个进程设置一次
SetProcessWorkingSetSize函数
没有办法做到这一点,我知道,虽然我很好奇,如果任何人有一个很好的答案阅读。 我一直在考虑将这样的东西添加到我的公司构build的应用程序之一,但没有find好办法。
我能想到的一件事(尽pipe不是直接点)是我相信你可以限制在Windows中的COM +应用程序的总内存使用量。 这需要将应用程序编写成在COM +中运行,当然,这是我所知道的最接近的方式。
工作集的东西是好的(作业对象也控制工作集),但这不是总的内存使用情况,只有真正的内存使用(分页)在任何时候。 它可以为你想要的,但它不限制总分配的内存。