Это приложение позволяет устанавливать ограничения на процессах Windows. Для этой цели он использует заданный объект.
Оглавление
Вы можете загрузить последнюю версию двоичные файлы со страницы релиза или установить его с шоколадным или вингте:
choco install procgov
# or
winget install procgovЗдесь не так много сказать :) Это режим по умолчанию, который активируется при запуске Procgov из командной строки, чтобы запустить новый процесс или прикрепить к запущению.
При использовании Procgov вы можете заметить, что он иногда запускает второй экземпляр сам (если вы не используете переключатель -номонитор). Этот второй экземпляр является монитором задания, и вы можете распознать его с помощью переключателя -монитор в командной строке ARG. Он останется в живых до последнего процесса в отслеживаемых рабочих местах. Должен быть максимум один экземпляр монитора заданий на сеанс Windows. Его роль состоит в том, чтобы контролировать работу, созданные с Procgov. Монитор должен выйти сразу после прекращения последнего процесса в контролируемых заданиях.
Эта функция находится на бета -фазе. Пожалуйста, используйте его с осторожностью и сообщите о любых опытных ошибках.
Если вы используете переключатель - -install для настройки постоянных приложений, Procgov сохранит настройки в реестре и создаст службу Windows с именем ProcessGovernor. По умолчанию он будет использовать системную учетную запись и папку %ProgramFiles%ProcessGovernor в качестве базового пути службы. Вы можете настроить эти настройки, используя коммутаторы командной строки -service-path , --service-username и -Service-Password . Если вы запустите команду установки для другого приложения, Procgov добавит новые данные в реестр, но повторно использует существующую услугу. Служба должна забрать обновленную конфигурацию через короткое время.
Сервис процесса, который мониторирует начальные процессы и применяет ограничения, предопределенные во время установки.
Чтобы удалить сервис, используйте переключатель -uninstall . Служба будет удалена при удалении последней сохраненной конфигурации. Если вы хотите удалить все сохраненные данные Procgov, наряду с службой, используйте переключатель -uninstall-all .
Вы можете установить ограничения на недавно созданный процесс или на уже запущенный. Чтобы ограничить запущенный процесс, используйте переключатель -p |-pid , например,
procgov.exe --maxmem 40M --pid 1234 Чтобы запустить новый процесс с применяемыми пределами, просто пропустите путь изображения процесса как аргумент Procgov, например. procgov64 --maxmem 40M c:temptest.exe . Если вам нужно передать какие -либо параметры в целевой процесс , лучше всего использовать -- например, отделить параметры Procgov от целевого процесса, например:
procgov.exe -m 100M -- test.exe -arg1 -arg2=val2 arg3Вы можете назначить несколько процессов одному и тому же заданию. Когда вы используете параметр -p несколько раз с различными идентификаторами процесса, Procgov будет применять одинаковые ограничения для всех процессов, например:
procgov.exe --maxmem 100M -p 1234 -p 1235 -p 1236Если какой -либо из процессов был уже назначен заданию Procgov, другие также будут назначены ему.
Также возможно обновить после установки ограничений . Тем не менее, есть одно требование: процессы не могут быть назначены на разные задания Procgov (поэтому они должны быть либо на одной и той же работе, либо незнашивались). Чтобы обновить ограничения, просто запустите Procgov, предоставляя новые ограничения и целевой идентификатор процесса. Procgov будет обновлять только указанные пределы. Давайте посмотрим на пример, чтобы лучше понять это поведение:
We set a CPU limit on a process 1234
procgov.exe --nowait -c 2 -p 1234
Then we run procgov again with the new CPU limit - procgov will update the existing job object
procgov.exe --nowait -c 4 -p 1234С помощью процесса переключателя -maxmem ( -m ) губернатор позволяет установить ограничение на память, совершенную процессом. В Windows Commoned Memory на самом деле все частная память, которую использует процесс. Таким образом, вы можете использовать губернатор процесса для тестирования ваших приложений .NET (включая веб -приложения) для утечек памяти. Если процесс протекает память, вы быстрее получите OutofmemoryException .
procgov.exe -m 100M -c 2 notepad.exe
procgov.exe -m 120M -p 1234С переключателями -maxws и - -minws вы можете управлять максимальными и минимальными размерами рабочих наборов (использование физической памяти) процесса. Этот вариант требует SeincreaseBasepriorityPrivilege , поэтому убедитесь, что у вашей учетной записи есть (больше информации в выпуске 69). Если вы хотите ограничить размер рабочего набора, не забудьте всегда предоставлять значения, превышающие ноль для обоих этих параметров, например:
procgov.exe --minws 1M --maxws 120M -p 1234Опция -maxjobmem позволяет вам указать максимальную совершенную память для всех процессов, которые принадлежат данному заданному объекту. Это может быть удобно, когда вы включаете распространение работы в детских процессах или используете один и тот же объект задания для управления несколькими процессами, например:
procgov.exe -r --maxjobmem 200M -- cmd.exe
procgov.exe -r --maxjobmem 1G -p 1234,1235,1236С помощью переключателя -CPU вы можете управлять тем, какие ядра будет работать. Если вы предоставите номер ядра процессора в качестве десятичного значения , вашему приложению будет разрешено использовать указанное количество ядер.
Если вы предоставите номер ядра процессора в виде значения шестнадцатеричного значения (с префиксом 0x) , это число будет рассматриваться как аффинная маска в первой группе процессоров - где каждый бит представляет собой ядро ЦП (начиная с наименьшего значимого бита). Кроме того, вы можете подготовить аффинную маску с номером группы процессоров, префиксированным буквой «G» и/или номером узла Numa, префиксированным буквой «n». Вы также можете пропустить сродство и использовать аффинность узла NUMA или группы процессоров. Допустимые примеры значения: n1:g0:0xF , n1:g0 , n1 , g0 .
Параметр -CPU может быть определен несколько раз , а последняя аффинная маска будет комбинацией предоставленных масок.
Давайте посмотрим на два примера использования в интенсивном применении процессора. В первом мы установили предел ядра процессора на два ядра:
procgov.exe --cpu=2 TestLimit.exeГрафик использования процессора на моей машине выглядит следующим образом:
Через секунду мы установили аффинную маску процессора (с шестнадцатеричной нотацией):
procgov.exe --cpu=0x2 TestLimit.exeГрафик процессора в этом случае выглядит следующим образом (обратите внимание на то, что используется только второе ядро):
Примеры более сложных настроек аффинности:
# Use processor group 0 affinity from NUMA node 0 and 1 core from the group 1 in NUMA node 1
procgov.exe --cpu=n0:g0 --cpu=n1:g1:0x1 TestLimit.exe
# Use processor group 0 affinity and 1 core from the group 1
procgov.exe --cpu=g0 --cpu=g1:0x1 TestLimit.exeЕсли вы не уверены, какая конфигурация процессора присутствует в системе, вы можете запустить Procgov без параметров, и она будет печатать:
procgov.exe
#
# Use --help to print the available options.
#
# === SYSTEM INFORMATION ===
#
# NUMA Node 0:
# Processor Group 0: 000000000000000F (CPUs: 0,1,2,3)
# Processor Group 1: 0000000000000007 (CPUs: 4,5,6)
#
# NUMA Node 1:
# Processor Group 2: 000000000000000F (CPUs: 7,8,9,10)
# Processor Group 3: 0000000000000007 (CPUs: 11,12,13)
#
# Total Physical Memory (MB): 20 460
# Available Physical Memory (MB): 16 086
# Total Committed Memory (MB): 3 701
# Current Committed Memory Limit (MB): 21 740Опция -CPU-RATE позволяет установить максимальную скорость ЦП для процесса. Если вы также установите аффинность ЦП, ставка будет применяться только к выбранным ядрам. Например, если у вас есть восемь логических ядер ЦП на вашей машине, и вы устанавливаете скорость процессора на 100%, а аффинность ЦП на 0x7 (первые четыре ядра), максимальная скорость ЦП, указанная для этого процесса инструментами мониторинга, будет 50% (мы работаем на полной пропускной способности, но на половине числа ЦП).
С помощью опции -Timeout вы можете определить максимальное время (время), что процесс может запустить, прежде чем Procgov его завершит. Если установлен опция -рекурсивное и проходит тайм -аут, Progov завершит также все процессы, которые дети начали с начала сеанса мониторинга.
Параметры --process-utime и -job-utime позволяют установить ограничение на максимальное время выполнения пользовательского режима для процесса (с вариантом --рекурсивным также всеми его детьми) или на работу. Последний случай будет иметь смысл с опцией -рекурсивным , поскольку он установит ограничение на общее время выполнения пользовательского режима для процесса и его детей.
Параметр -Приоритет устанавливает приоритетный класс процесса контролируемых процессов. Возможные значения включают в себя: Idle , BelowNormal , Normal , AboveNormal , High , RealTime . Три самых высоких приоритета требуют SeincreaseBasepriorityPrivilege , поэтому убедитесь, что у вашей учетной записи есть (больше информации в выпуске 69).
С помощью переключателя -env вы можете установить переменные среды процесса. Этот переключатель принимает путь к текстовому файлу со значениями переменной, например:
COR_ENABLE_PROFILING=0x01
COR_PROFILER={32E2F4DA-1BEA-47ea-88F9-C5DAF691C94A}Команда Procgov может выглядеть следующим образом:
procgov.exe --env c: t emp e nv.txt -c 2 dotnet_app.exeВы можете установить переменные среды при запуске нового процесса или доступа к существующему.
Вы можете включить привилегии в целевом процессе с помощью переключателя -eNable-privilege . Вы можете указать несколько привилегий, используя этот параметр несколько раз, например:
procgov.exe --enable-privilege=SeDebugPrivilege --enable-privilege=SeShutdownPrivilege notepadИмейте в виду, что в Windows вы не можете добавить новые привилегии в токен процесса. Вы можете включить только существующие. Вы можете проверить доступные привилегии процесса в процессе хакера или исследования процесса. Проверьте документацию, чтобы узнать данную привилегию, чтобы узнать, как сделать ее доступным для данного пользователя (например, вам может потребоваться обновить политики группы).
Ниже вы можете найти список людей, которые внесли свой вклад в этот проект. Спасибо!