有没有办法在Windows XP中为进程设置系统范围内的内存限制?我有几个不稳定的应用程序,它们通常工作得很好,但可能会遇到错误,导致在几秒钟内消耗掉所有内存(至少我认为是这样)。这会导致Windows完全失去响应并强制重新启动,因此会丢失我的工作。
我希望能够像Linux上的/etc/limits那样做一些事情-例如设置M90(将单个用户的最大内存设置为90%),以便无论如何系统都可以获得剩余的10%。
使用Windows 作业对象(Job Objects)。作业对象类似于进程组,可以限制内存使用和进程优先级。
使用微软的Application Verifier (AppVerifier)工具。
在我的情况下,我需要模拟内存不再可用,因此我在工具中执行了以下操作:
2分钟后,我的程序无法再分配新的内存,我能够看到如何处理一切。
根据您的应用程序,限制语言解释器使用的内存可能更容易。例如,对于Java,您可以设置JVM将分配的RAM数量。
否则,可以使用Windows API为每个进程设置一次。
从最终用户的角度来看,在超级用户问题“在Windows上是否有可能限制特定进程的内存使用量”中,有一些有用的答案和评论,包括如何在任何或所有以下设置递归配额限制:
大多数情况下,可以通过内置的Windows“作业对象”系统(如上面提到的@Adam Mitz的答案和@Stephen Martin的评论)来实现,使用:
(注意:嵌套的作业对象可能并非在所有早期版本的Windows下都可用,但未嵌套的版本似乎可以追溯到Windows XP)
就每用户的总配额而言:
renice
,其他吗?
CreateJobObject
中。我错过了什么? - Lorenz Lo Sauer