Назад | Перейти на главную страницу

Какие ограничения WinRM / WinRS накладывает на выполняемые процессы?

я использую winrs для запуска тестового клиента против некоторого серверного программного обеспечения, которое я разрабатываю. Я использую клиент для создания нагрузки на тестируемый сервер для профилирования. И машина, на которой я запускаю серверное программное обеспечение, и winrs на и машине, на которой я запускаю тестовый клиент (используя winrs на первой машине, на которой он запущен) стоят коробки Win7, x64, много памяти. Все процессы запускаются от имени администратора.

Когда я запускаю тестовый клиент вручную, он может генерировать 6000 одновременных подключений и насыщать ссылку 100 МБ (рассматриваемые машины имеют сеть Gb, поэтому я загружаю ссылку между ними только примерно до 10%), когда я запускаю его через winrs около половины соединений терпят неудачу из-за того, что кажется ошибками, связанными с памятью в OpenSSL.

Я уверен, что в моем тестовом клиенте происходит что-то странное, НО было бы полезно узнать, какие ограничения, если таковые имеются, могут иметь место для процессов, которые WinRM запускает от имени запроса от winrs. Мне не удалось найти никаких документов, которые предполагали бы наличие ограничений, но, возможно, я недостаточно внимательно их ищу.

Обновить: Подумав об этом еще немного, кажется, что вполне вероятно, что процессы выполняются под объектом задания с установленным ограничением памяти, это имеет смысл, но я бы предположил, что если бы это было так, это было бы что-то, что могло бы быть настроенным на стороне сервера ...

Да, это можно настроить. Из командной строки это установит ограничение на 500 МБ.

winrm set winrm / config / winrs @ {MaxMemoryPerShellMB = "500"}

поищите в документации msdn "конфигурацию WinRM" для получения дополнительной информации.

Что ж, вроде я прав. Команды, выполняемые Winrs, выполняются внутри объекта задания, и объект задания ограничен.

Вот что говорит простая программа для сброса этих ограничений задания о процессе, выполняемом на одном из моих компьютеров с Windows 7.

Job report for process: 10676
Process IS in a job
Flags: 0x2b08 - 
   JOB_OBJECT_LIMIT_ACTIVE_PROCESS
   JOB_OBJECT_LIMIT_PROCESS_MEMORY
   JOB_OBJECT_LIMIT_JOB_MEMORY
   JOB_OBJECT_LIMIT_BREAKAWAY_OK
   JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE

ActiveProcessLimit: 15
Affinity: 0x0
MaximumWorkingSetSize: 0
MinimumWorkingSetSize: 0
PerJobUserTimeLimit: 0
PerProcessUserTimeLimit: 0
PriorityClass: 32
SchedulingClass: 5
JobMemoryLimit: 157286400
ProcessMemoryLimit: 157286400

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

Хорошая новость в том, что эта работа JOB_OBJECT_LIMIT_BREAKAWAY_OK set, что означает, что я могу просто написать программу запуска, которую я запускаю через Winrs, которая сама запускает фактическую целевую команду и запускает новый процесс с CREATE_BREAKAWAY_FROM_JOB флаг. Это заставляет мой реальный целевой процесс работать вне ограничений заданий WinRs.