Установить ограничение памяти процесса Windows (или пользователя) - PullRequest
45 голосов
/ 11 октября 2008

Есть ли способ установить ограничение системной памяти, которое процесс может использовать в Windows XP? У меня есть пара нестабильных приложений, которые в большинстве случаев работают нормально, но могут привести к ошибке, которая приводит к съедению целой памяти за считанные секунды (или, по крайней мере, я так думаю). Это приводит к полной перезагрузке, поскольку Windows перестает отвечать на запросы, и я теряю работу.

Я хотел бы иметь возможность сделать что-то вроде / etc / limit в Linux - например, с настройкой M90 (установить максимум 90% памяти для одного пользователя, который будет выделен). Таким образом, система получает оставшиеся 10% независимо от того, что.

Ответы [ 4 ]

36 голосов
/ 11 октября 2008

Использовать Windows Объекты заданий . Задания подобны группам процессов и могут ограничивать использование памяти и приоритет процессов.

23 голосов
/ 17 августа 2009

Используйте инструмент Application Verifier (AppVerifier) ​​ от Microsoft.

В моем случае мне нужно смоделировать память, которая больше не доступна, поэтому я сделал следующее в инструменте:

  1. Добавлено мое приложение
  2. Не проверено Basic
  3. Проверено моделирование низкого ресурса
    • Изменено значение TimeOut на 120000 - мое приложение будет работать нормально в течение 2 минут, прежде чем что-либо вступит в силу.
    • Изменено значение HeapAlloc до 100 - 100% вероятности ошибки выделения кучи
    • Установите для стека значение true - стек не сможет расти больше
  4. Сохранить
  5. Запустить мое приложение

Через 2 минуты моя программа больше не могла выделять новую память, и я смог увидеть, как все обрабатывается.

4 голосов
/ 11 октября 2008

В зависимости от ваших приложений может быть проще ограничить объем памяти, который использует языковой переводчик. Например, с Java вы можете установить объем оперативной памяти, которую будет выделять JVM.

В противном случае его можно установить один раз для каждого процесса с помощью Windows API

SetProcessWorkingSetSize Функция

3 голосов
/ 12 октября 2008

Нет способа сделать это, о котором я знаю, хотя мне очень интересно читать, если у кого-то есть хороший ответ. Я думал о том, чтобы добавить что-то подобное в одно из приложений, создаваемых моей компанией, но не нашел хорошего способа сделать это.

Единственное, о чем я могу подумать (хотя и не прямо), это то, что я считаю, что вы можете ограничить общее использование памяти для приложения COM + в Windows. Конечно, для написания приложения нужно было бы запустить его в COM +, но это самый близкий из известных мне способов.

Материал рабочего набора хорош (Объекты заданий также управляют рабочими наборами), но это не общее использование памяти, а только реальное использование памяти (выгруженной) в любой момент времени. Это может работать для того, что вы хотите, но на самом деле это не ограничивает общий объем выделенной памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...