Есть ли способ ограничить процессор / память процесса?

Проблема: у меня есть машина разработчика (читай: быстрая, много памяти), но у пользователя есть пользовательская машина (читай: медленная, мало памяти).

Я могу смоделировать медленную сеть с помощью Fiddler ( http://www.fiddler2.com/fiddler2/ ). Я могу посмотреть, как процессор используется с течением времени для процесса с помощью Process Explorer ( http://technet.microsoft.com/en -us / sysinternals / bb896653.aspx ).

Есть ли способ ограничить количество ЦП, которое может иметь процесс, или объем памяти, который может иметь процесс, для более эффективного моделирования пользовательской машины? (Например, чтобы изолировать проблемы с производительностью)

Полагаю, я мог бы использовать виртуальную машину, но я ищу что-то более легкое.

Я использую Windows XP, но мне хотелось бы найти решение для любой машины с Windows. Спасибо.

Ответов (5)

Решение

Платформа SDK используется прийти со стрессом инструментов для выполнения всего этого в старые добрые времена ( STRESS.EXE, CPUSTRESS.EXE в SDK), но они все еще могут быть там (проверить платформы SDK и / или визуальной установки студии для этих двух файлов - к сожалению , У меня нет ни PSDK, ни VS, установленных на машине, с которой я печатаю.)

Другие инструменты:

  • память : производительность и надежность (например, обработка неудачного выделения памяти): можно использовать EatMem
  • ЦП : производительность и надежность (например, в условиях гонки): можно использовать CPU Burn , Prime95 и т. Д.
  • дескрипторы (GDI, User): надежность (например, обработка неудачного выделения ресурсов GDI): ??? возможно, придется написать свой собственный, но исчерпание дескрипторов GDI (глючные приложения GTK обычно съедают их все, пока все другие приложения в системе не начнут падать замертво, как мухи) - настоящий тест для любого приложения Windows
  • disk : производительность и надежность (например, обработка диска заполнена): DiskFiller и т. д.

Вы можете запустить MemAlloc, чтобы сжать оперативную память, возможно, сразу несколько копий.

Я нашел связанный вопрос:

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

В принятом ответе на вопрос есть ссылка на API Windows SetProcessWorkingSetSize, поэтому это не совсем инструмент, который может ограничивать объем памяти, который может использовать процесс.

Что касается изменения количества ресурсов ЦП, которые может использовать процесс, если вы не возражаете против гранулярности ограничения ресурсов по ядрам, диспетчер задач может изменить привязку к процессору для процесса.

В диспетчере задач щелкните процесс правой кнопкой мыши и выберите «Установить соответствие ...», затем выберите ядра процессора, которым может быть назначен процесс.

Если машина разработки имеет много ядер, но пользовательская машина имеет только одно, то вместо того, чтобы разрешать запуск процесса на всех доступных ядрах, установите привязку процесса к процессору только для одного ядра.

Это не имеет ничего общего с SetProcessWorkingSetSize

Просто используйте внутренний API ядра Win32, чтобы ограничить использование ЦП.

AppVerifier имеет функцию моделирования с низким уровнем ресурсов.

Вы также можете попробовать установить очень низкий приоритет вашего процесса.