Подтвердить что ты не робот

Установите предел памяти Windows (или пользователя)

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Функция SetProcessWorkingSetSize

Ответ 4

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

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

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