Este aplicativo permite definir restrições nos processos do Windows. Ele usa um objeto de emprego para esse fim.
Índice
Você pode baixar os binários mais recentes da versão na página de lançamento ou instalá -la com chocolate ou winget:
choco install procgov
# or
winget install procgovNão há muito a dizer aqui :) É o modo padrão que é ativado quando você inicia o ProcGov a partir do prompt de comando para iniciar um novo processo ou anexar a um em execução.
Ao usar o ProcGov, você pode observar que às vezes ele inicia uma segunda instância de si mesma (a menos que você use o switch - -nomonitor). Esta segunda instância é um monitor de emprego e você pode reconhecê -lo pelo interruptor -monitor na linha de comando args. Ele permanecerá vivo até o último processo nas saídas de empregos monitorados. Deve haver no máximo uma instância de um monitor de emprego por sessão do Windows. Seu papel é monitorar os trabalhos criados com a ProcGov. O monitor deve sair logo após o término do último processo nos trabalhos monitorados.
Esse recurso está em uma fase beta. Por favor, use -o com cautela e relate quaisquer erros experientes.
Se você usar o interruptor -Instalar as configurações de aplicativos persistir, o ProcGov salvará as configurações no registro e criará um serviço Windows chamado ProcessGovernor. Por padrão, ele usará a conta do sistema e a pasta %ProgramFiles%ProcessGovernor como o caminho da base de serviço. Você pode definir essas configurações usando os interruptores --Service - Service-Username e --Service-Password -line. Se você executar o comando de instalação para outro aplicativo, o ProcGov adicionará novos dados ao registro, mas reutilizará o serviço existente. O serviço deve pegar a configuração atualizada após um curto período de tempo.
O ProcessGovernor Service Monitora os processos de partida e aplica limites predefinidos durante a instalação.
Para desinstalar o serviço, use o switch --uninstall . O serviço será removido quando você remover a última configuração salva. Se você deseja remover todos os dados do ProcGov salvos, juntamente com o serviço, use o switch --uninstall-all .
Você pode definir limites em um processo recém -criado ou em um já em execução. Para restringir um processo em execução, use o interruptor -p |--pid , por exemplo.
procgov.exe --maxmem 40M --pid 1234 Para iniciar um novo processo com os limites aplicados, basta passar no caminho da imagem do processo como um argumento procgov, por exemplo. procgov64 --maxmem 40M c:temptest.exe . Se você precisar passar qualquer parâmetros para o processo de destino , é melhor usar -- para separar os parâmetros do ProcGov dos do processo de destino, por exemplo:
procgov.exe -m 100M -- test.exe -arg1 -arg2=val2 arg3Você pode atribuir vários processos ao mesmo objeto de trabalho. Quando você usa o parâmetro -p várias vezes com diferentes IDs de processo, o ProcGov aplicará os mesmos limites para todos os processos, por exemplo:
procgov.exe --maxmem 100M -p 1234 -p 1235 -p 1236Se algum dos processos já foi atribuído a um objeto de emprego da ProcGov, outros também serão atribuídos a ele.
Também é possível atualizar quando definido limites . No entanto, existe um requisito: os processos não podem ser atribuídos a diferentes trabalhos da ProcGov (portanto, eles devem estar no mesmo trabalho ou não atribuídos). Para atualizar os limites, basta executar o ProcGov fornecendo novos limites e os IDs do processo de destino. O ProcGov atualizará apenas os limites especificados. Vamos dar uma olhada em um exemplo para entender melhor esse comportamento:
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 1234Com o governador de processo de switch - -maxmem ( -m ) permite definir um limite para uma memória cometida por um processo. Na memória comprometida do Windows, na verdade, é toda a memória privada que o processo usa. Dessa forma, você pode usar o governador do processo para testar seus aplicativos .NET (incluindo aplicativos da Web) quanto a vazamentos de memória. Se o processo estiver vazando a memória, você mais rapidamente obtém a OrofMemoryException .
procgov.exe -m 100M -c 2 notepad.exe
procgov.exe -m 120M -p 1234Com os interruptores - -maxws e - -MINWs, você pode controlar os tamanhos de conjunto de trabalho máximo e mínimo (uso da memória física) do processo. Esta opção requer SeinCreaseBasePriorityPrivilege , portanto, verifique se sua conta possui (mais informações na edição 69). Se você deseja limitar o tamanho do conjunto de trabalho, lembre -se de sempre fornecer valores maiores que zero para esses dois parâmetros, por exemplo:
procgov.exe --minws 1M --maxws 120M -p 1234A opção - -maxjobmem permite especificar a memória máxima comprometida para todos os processos que pertencem a um determinado objeto de emprego. Isso pode ser útil quando você habilita a propagação do trabalho aos processos filhos ou usa o mesmo objeto de trabalho para controlar vários processos, por exemplo:
procgov.exe -r --maxjobmem 200M -- cmd.exe
procgov.exe -r --maxjobmem 1G -p 1234,1235,1236Com o switch -CPU, você pode controlar quais núcleos seu aplicativo será executado. Se você fornecer o número principal da CPU como um valor decimal , seu aplicativo poderá usar o número especificado de núcleos.
Se você fornecer o número do núcleo da CPU como um valor hexadecimal (com prefixo 0x) , esse número será tratado como uma máscara de afinidade no primeiro grupo de processadores - onde cada bit representa um núcleo da CPU (a partir do bit menos significativo). Além disso, você pode prender a máscara de afinidade com um número de processador prefixado com a letra 'g' e/ou um número de nó NUMA prefixado com uma letra 'n'. Você também pode pular a afinidade e usar a afinidade do nó NUMA ou do processador. Valores de exemplo válidos: n1:g0:0xF , n1:g0 , n1 , g0 .
O parâmetro - -CPU pode ser definido várias vezes e a máscara de afinidade final será uma combinação das máscaras fornecidas.
Vamos dar uma olhada em dois exemplos de usos em um aplicativo intensivo da CPU. Em um primeiro, definimos o limite principal da CPU para dois núcleos:
procgov.exe --cpu=2 TestLimit.exeUm gráfico de uso da CPU na minha máquina parece o seguinte:
Em um segundo, definimos a máscara de afinidade da CPU (com a notação hexadecimal):
procgov.exe --cpu=0x2 TestLimit.exeUm gráfico da CPU neste caso parece o seguinte (observe apenas o segundo núcleo usado):
Exemplos de configurações de afinidade mais complexas:
# 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.exeSe você não tiver certeza de qual configuração da CPU está presente no sistema, você pode executar o ProcGov sem params e ele o imprimirá:
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 740A opção --CPU-taxa permite definir a taxa máxima de CPU para o processo. Se você também definir a afinidade da CPU, a taxa se aplicará apenas aos núcleos selecionados. Por exemplo, se você possui oito núcleos de CPU lógicos em sua máquina e define a taxa de CPU como 100% e a afinidade da CPU como 0x7 (primeiros quatro núcleos), a taxa máxima de CPU relatada para esse processo pelas ferramentas de monitoramento será de 50% (estamos sendo executados em plena capacidade, mas em metade do número da CPU).
Com a opção - -Timeout, você pode definir o tempo máximo (horário do relógio), o processo pode ser executado antes que o ProcGov o encerre. Se a opção -Recursiva estiver definida e o tempo limite passar, o Progov terá rescisão também em todos os processos que as crianças iniciaram desde o início da sessão de monitoramento.
As opções --Process-Utime e --Job-Utime permitem definir um limite para o tempo máximo de execução no modo de usuário para um processo (com a opção- Recursiva também todos os seus filhos) ou um trabalho. O último caso fará sentido com a opção -Recursiva , pois definirá um limite para o tempo total de execução no modo de usuário para o processo e seus filhos.
O parâmetro --priority define a classe de prioridade do processo de processos monitorados. Os valores possíveis incluem: Idle , BelowNormal , Normal , AboveNormal , High , RealTime . As três prioridades mais altas exigem que o SeinCreaseBasePriorityPrivilege , portanto, verifique se sua conta possui (mais informações na edição 69).
Com o switch --env, você pode definir variáveis de ambiente de processo. Este switch aceita um caminho para um arquivo de texto com os valores variáveis, por exemplo:
COR_ENABLE_PROFILING=0x01
COR_PROFILER={32E2F4DA-1BEA-47ea-88F9-C5DAF691C94A}O comando procgov pode parecer o seguinte:
procgov.exe --env c: t emp e nv.txt -c 2 dotnet_app.exeVocê pode definir as variáveis de ambiente ao iniciar um novo processo ou acessar uma existente.
Você pode habilitar privilégios no processo de destino com o interruptor --enable-privilegege . Você pode especificar vários privilégios usando este parâmetro várias vezes, por exemplo:
procgov.exe --enable-privilege=SeDebugPrivilege --enable-privilege=SeShutdownPrivilege notepadLembre -se de que no Windows, você não pode adicionar novos privilégios ao token do processo. Você só pode ativar os existentes. Você pode verificar os privilégios de processo disponíveis no Hacker de processo ou no Process Explorer. Verifique a documentação para obter um determinado privilégio para aprender como disponibilizá -lo para um determinado usuário (por exemplo, pode ser necessário atualizar as políticas de grupo).
Abaixo, você pode encontrar uma lista de pessoas que contribuíram para este projeto. Obrigado!