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

设置Windows进程(或用户)内存限制,windows,memory,Windows,Memory,有没有办法设置一个进程可以在Windows XP中使用的系统范围内存限制?我有几个不稳定的应用程序,它们在大部分时间都可以正常工作,但可能会遇到一个bug,导致在几秒钟内(或者至少我认为是这样)耗尽整个内存。这会导致硬重置,因为Windows变得完全无响应,我失去了工作 我希望能够在Linux上做一些类似/etc/limits的事情,例如设置M90(为单个用户分配90%的最大内存)。因此,不管怎样,系统都会得到剩余的10%。根据您的应用程序,限制语言解释器使用的内存可能会更容易。例如,使用Jav

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


我希望能够在Linux上做一些类似/etc/limits的事情,例如设置M90(为单个用户分配90%的最大内存)。因此,不管怎样,系统都会得到剩余的10%。

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

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


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

据我所知,没有办法做到这一点,尽管我很想知道是否有人有好的答案。我一直在考虑将类似的东西添加到我公司构建的一个应用程序中,但没有找到好的方法

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

工作集的内容很好(作业对象也控制工作集),但这不是总内存使用量,而是任何时候的实际内存使用量(分页)。它可以满足您的需要,但它不会限制总的分配内存。

使用Microsoft提供的工具

在我的例子中,我需要模拟内存不再可用,因此我在工具中执行了以下操作:

  • 添加了我的应用程序
  • 未经检查的基本
  • 检查低资源模拟
    • 将超时更改为120000-在任何操作生效之前,我的应用程序将正常运行2分钟
    • 将HeapAlloc更改为100-堆分配错误的概率为100%
    • 将堆栈设置为true-堆栈将无法再增长
  • 拯救
  • 启动我的应用程序

  • 2分钟后,我的程序无法再分配新内存,我可以看到所有事情是如何处理的。

    BartPE做了类似的事情,所以这应该是可能的。“不知道是怎么回事。”米夏米尼基,你能详细说明一下选定的答案对你有什么帮助吗?在AICT中,它描述了如何使用WINAPI克服这个问题,但没有提供任何应用程序,通常将现有进程挂起、挂钩并包装到
    CreateJobObject
    s中。我缺少什么?@OregonGhost,你有关于该功能的更多信息吗?正在寻找Superuser.com关于该功能的答案……JobObjects还可以控制作业或进程可以提交的最大虚拟内存量。查看SetInformationJobObject和JOBOBJECT_EXTENDED_LIMIT_信息结构。这实际上并不限制进程可以提交的内存量,只限制在任何特定时间分页的内存量。对于原始海报,它可能大部分时间都有效,但限制进程可使用的总内存量的正确答案是使用作业对象。