Esta aplicación le permite establecer restricciones en los procesos de Windows. Utiliza un objeto de trabajo para este propósito.
Tabla de contenido
Puede descargar los últimos binarios de la versión de la página de lanzamiento o instalarlo con chocolate o winget:
choco install procgov
# or
winget install procgovNo hay mucho que decir aquí :) Es el modo predeterminado que se activa cuando inicia PROCGOV desde el símbolo del sistema para iniciar un nuevo proceso o adjuntar a uno en ejecución.
Al usar PROCGOV, puede observar que a veces lanza una segunda instancia de sí misma (a menos que use el interruptor -Nomonitor). Esta segunda instancia es un monitor de trabajo y puede reconocerlo mediante el interruptor -Monitor en el comando Args. Se mantendrá con vida hasta el último proceso en las salidas de trabajos monitoreados. Debe haber al máximo una instancia de un monitor de trabajo por sesión de Windows. Su papel es monitorear los trabajos creados con Procgov. El monitor debe salir justo después de la terminación del último proceso en los trabajos monitoreados.
Esta característica está en una fase beta. Úselo con precaución e informe cualquier error experimentado.
Si utiliza el cambio -Instalador a la configuración de la aplicación Persist, PROCGOV guardará la configuración en el registro y creará un servicio de Windows llamado ProcessGovernor. Por defecto, utilizará la cuenta del sistema y la carpeta %ProgramFiles%ProcessGovernor como la ruta de la base de servicio. Puede configurar esta configuración utilizando los conmutadores --service-Path , --Service-UserName y --Service-Password de comandos. Si ejecuta el comando de instalación para otra aplicación, PROCGOV agregará nuevos datos al registro pero reutilizará el servicio existente. El servicio debe recoger la configuración actualizada después de poco tiempo.
El servicio ProcessGovernor monitorea los procesos de partida y aplica límites predefinidos durante la instalación.
Para desinstalar el servicio, use el interruptor --uninstall . El servicio se eliminará cuando elimine la última configuración guardada. Si desea eliminar todos los datos de PROCGOV guardados, junto con el servicio, use el interruptor --Unstall-All .
Puede establecer límites en un proceso recién creado o en uno que ya se ejecuta. Para limitar un proceso en ejecución, use el interruptor -p |--pid , por ejemplo.
procgov.exe --maxmem 40M --pid 1234 Para comenzar un nuevo proceso con los límites aplicados, simplemente pase la ruta de la imagen del proceso como un argumento de Procgov, por ejemplo. procgov64 --maxmem 40M c:temptest.exe . Si necesita pasar algún parámetro al proceso de destino , es mejor usarlo -- para separar los parámetros de PROCGOV de los del proceso de destino, por ejemplo:
procgov.exe -m 100M -- test.exe -arg1 -arg2=val2 arg3Puede asignar múltiples procesos al mismo objeto de trabajo. Cuando usa el parámetro -p varias veces con diferentes ID de proceso, PROCGOV aplicará los mismos límites para todos los procesos, por ejemplo:
procgov.exe --maxmem 100M -p 1234 -p 1235 -p 1236Si alguno de los procesos ya estaba asignado a un objeto de trabajo PROCGOV, otros también se lo asignarán.
También es posible actualizar una vez establecido límites . Sin embargo, hay un requisito: los procesos no se pueden asignar a diferentes trabajos de Procgov (por lo que deben estar en el mismo trabajo o no asignados). Para actualizar los límites, simplemente ejecute PROCGOV proporcionando nuevos límites y los ID (s) de proceso de destino. Procgov actualizará solo los límites especificados. Echemos un vistazo a un ejemplo para comprender mejor este comportamiento:
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 1234Con el gobernador de proceso - -maxmem ( -m ) del proceso le permite establecer un límite en una memoria cometida por un proceso. En la memoria comprometida de Windows es en realidad toda la memoria privada que utiliza el proceso. De esta manera, puede usar el gobernador de procesos para probar sus aplicaciones .NET (incluidas las aplicaciones web) para fugas de memoria. Si el proceso está filtrando memoria, obtienes más rápido, obtienes OutOfMemoryException .
procgov.exe -m 100M -c 2 notepad.exe
procgov.exe -m 120M -p 1234Con los conmutadores --maxws y -minws , puede controlar los tamaños de conjunto de trabajo máximos y mínimos (uso de memoria física) del proceso. Esta opción requiere SeiCreseBasPriorityPrivilege , así que asegúrese de que su cuenta lo tenga (más información en el número 69). Si desea limitar el tamaño del conjunto de trabajo, recuerde proporcionar siempre valores mayores que cero para ambos parámetros, por ejemplo:
procgov.exe --minws 1M --maxws 120M -p 1234La opción --maxJobMem le permite especificar la memoria máxima comprometida para todos los procesos que pertenecen a un objeto de trabajo dado. Esto puede ser útil cuando habilita la propagación del trabajo a los procesos infantiles o usa el mismo objeto de trabajo para controlar múltiples procesos, por ejemplo:
procgov.exe -r --maxjobmem 200M -- cmd.exe
procgov.exe -r --maxjobmem 1G -p 1234,1235,1236Con el interruptor - -CPU puede controlar en qué núcleos ejecutará su aplicación. Si proporciona el número de núcleo de CPU como valor decimal , su aplicación podrá usar el número especificado de núcleos.
Si proporciona el número de núcleo de CPU como un valor hexadecimal (con prefijo 0x) , este número se tratará como una máscara de afinidad en el primer grupo de procesadores, donde cada bit representa un núcleo de CPU (a partir del bit menos significativo). Además, puede preparar la máscara de afinidad con un número de grupo de procesador prefijo la letra 'G' y/o un número de nodo NUMA prefijado con una letra 'n'. También puede omitir la afinidad y usar la afinidad del grupo NUMA o el grupo de procesadores. Valores de ejemplo válidos: n1:g0:0xF , n1:g0 , n1 , g0 .
El parámetro - -CPU se puede definir varias veces y la máscara de afinidad final será una combinación de las máscaras proporcionadas.
Echemos un vistazo a dos usos de ejemplo en una aplicación intensiva de CPU. En un primero establecemos el límite del núcleo de la CPU en dos núcleos:
procgov.exe --cpu=2 TestLimit.exeUn gráfico de uso de CPU en mi máquina se ve como sigue:
En un segundo establecemos la máscara de afinidad de la CPU (con la notación hexadecimal):
procgov.exe --cpu=0x2 TestLimit.exeUn gráfico de CPU en este caso se ve de la siguiente manera (observe que solo se usa el segundo núcleo):
Ejemplos de configuraciones de afinidad más complejas:
# 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.exeSi no está seguro de qué configuración de CPU está presente en el sistema, puede ejecutar PROCGOV sin parámetros y la 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 740La opción --CPU-tasa le permite establecer la tasa máxima de CPU para el proceso. Si también establece la afinidad de la CPU, la tasa se aplicará solo a los núcleos seleccionados. Por ejemplo, si tiene ocho núcleos lógicos de CPU en su máquina y establece la tasa de CPU al 100% y la afinidad de la CPU a 0x7 (primeros cuatro núcleos), la tasa máxima de CPU informada para este proceso por las herramientas de monitoreo será del 50% (estamos funcionando a su capacidad total pero en la mitad del número de CPU).
Con la opción -TimeOut , puede definir el tiempo máximo (tiempo del reloj) El proceso puede ejecutarse antes de que PROCGOV lo termine. Si se establece la opción -recuperación y se pasa el tiempo de espera, Progov finalizará también todo el proceso que los niños comenzaron desde el comienzo de la sesión de monitoreo.
Las opciones --Process-UTIME y -JOB-UTIME le permiten establecer un límite en el tiempo máximo de ejecución del modo de usuario para un proceso (con la opción -recursiva también todos sus hijos) o un trabajo. El último caso tendrá sentido con la opción -Recursiva , ya que establecerá un límite en el tiempo total de ejecución del modo de usuario para el proceso y sus hijos.
El parámetro -Prioridad establece la clase de prioridad del proceso de procesos monitoreados. Los valores posibles incluyen: Idle , BelowNormal , Normal , AboveNormal , High , RealTime . Las tres prioridades más altas requieren SeiCreseBasPriorityPrivilege , así que asegúrese de que su cuenta lo tenga (más información en el problema 69).
Con el interruptor --env puede establecer variables de entorno de proceso. Este conmutador acepta una ruta a un archivo de texto con los valores variables, por ejemplo:
COR_ENABLE_PROFILING=0x01
COR_PROFILER={32E2F4DA-1BEA-47ea-88F9-C5DAF691C94A}El comando Procgov puede verse de la siguiente manera:
procgov.exe --env c: t emp e nv.txt -c 2 dotnet_app.exePuede establecer las variables de entorno al comenzar un nuevo proceso o acceder a uno existente.
Puede habilitar los privilegios en el proceso de destino con el interruptor --enable-privilegio . Puede especificar múltiples privilegios utilizando este parámetro varias veces, por ejemplo:
procgov.exe --enable-privilege=SeDebugPrivilege --enable-privilege=SeShutdownPrivilege notepadTenga en cuenta que en Windows, no puede agregar nuevos privilegios al token de proceso. Solo puede habilitar los existentes. Puede verificar los privilegios de proceso disponibles en el hacker de procesos o el explorador de procesos. Consulte la documentación de un privilegio determinado para aprender cómo ponerla a disposición de un usuario determinado (por ejemplo, es posible que deba actualizar las políticas de grupo).
A continuación puede encontrar una lista de personas que contribuyeron a este proyecto. ¡Gracias!