Cette application vous permet de définir des contraintes sur les processus Windows. Il utilise un objet de travail à cet effet.
Table des matières
Vous pouvez télécharger les derniers binaires de version à partir de la page de version ou l'installer avec Chocolatey ou Winget:
choco install procgov
# or
winget install procgovPas grand-chose à dire ici :) C'est le mode par défaut qui est activé lorsque vous lancez Procgov à partir de l'invite de commande pour lancer un nouveau processus ou attacher à un nouveau processus.
Lorsque vous utilisez Procgov, vous pouvez observer qu'il lance parfois une deuxième instance de lui-même (sauf si vous utilisez le commutateur --nomonitor). Cette deuxième instance est un moniteur d'emploi et vous pouvez le reconnaître par le commutateur-monitor dans les args de la ligne de commande. Il restera en vie jusqu'au dernier processus dans les sorties de travaux surveillés. Il devrait y avoir au maximum une instance d'un moniteur de travail par session Windows. Son rôle est de surveiller les emplois créés avec Procgov. Le moniteur doit quitter juste après la cessation du dernier processus dans les travaux surveillés.
Cette fonctionnalité est en phase bêta. Veuillez l'utiliser avec prudence et signaler toutes les erreurs expérimentées.
Si vous utilisez les paramètres d'application - installer les paramètres d'application, Procgov enregistrera les paramètres du registre et créera un service Windows nommé ProcessGovernor. Par défaut, il utilisera le compte système et le dossier %ProgramFiles%ProcessGovernor comme chemin de base de service. Vous pouvez configurer ces paramètres en utilisant les commutateurs de ligne de commande - Service-Path , - Service-Username et - Service-Password . Si vous exécutez la commande d'installation pour une autre application, Procgov ajoutera de nouvelles données au registre mais réutilisera le service existant. Le service doit récupérer la configuration mise à jour après un court laps de temps.
Le service ProcessGovernor surveille les processus de démarrage et applique des limites prédéfinies lors de l'installation.
Pour désinstaller le service, utilisez le commutateur --Unstall . Le service sera supprimé lorsque vous supprimerez la dernière configuration enregistrée. Si vous souhaitez supprimer toutes les données Procgov enregistrées, ainsi que le service, utilisez le commutateur --Unstall-All .
Vous pouvez définir des limites sur un processus nouvellement créé ou sur un processus déjà en cours d'exécution. Pour contraindre un processus en cours, utilisez le commutateur -p | - pid , par exemple.
procgov.exe --maxmem 40M --pid 1234 Pour démarrer un nouveau processus avec les limites appliquées, passez simplement le chemin d'image du processus en tant qu'argument Procgov, par exemple. procgov64 --maxmem 40M c:temptest.exe . Si vous devez transmettre des paramètres au processus cible , il est préférable d'utiliser -- pour séparer les paramètres ProCGOV de ceux du processus cible, par exemple:
procgov.exe -m 100M -- test.exe -arg1 -arg2=val2 arg3Vous pouvez attribuer plusieurs processus au même objet de travail. Lorsque vous utilisez le paramètre -p plusieurs fois avec des ID de processus différents, Procgov appliquera les mêmes limites pour tous les processus, par exemple:
procgov.exe --maxmem 100M -p 1234 -p 1235 -p 1236Si l'un des processus était déjà attribué à un objet de travail Procgov, d'autres y seront également affectés.
Il est également possible de mettre à jour une fois fixé des limites . Cependant, il y a une exigence: les processus ne peuvent pas être affectés à différents travaux Procgov (ils doivent donc être dans le même travail ou non assistés). Pour mettre à jour les limites, exécutez simplement Procgov fournissant de nouvelles limites et les ID de processus cible (s). Procgov mettra à jour uniquement les limites spécifiées. Jetons un coup d'œil à un exemple pour mieux comprendre ce comportement:
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 1234Avec le processus de commutateur --maxMem ( -M ) vous permet de définir une limite à une mémoire commise par un processus. Sur Windows, la mémoire engagée est en fait toute la mémoire privée que le processus utilise. De cette façon, vous pouvez utiliser Process Governor pour tester vos applications .NET (y compris les applications Web) pour les fuites de mémoire. Si le processus fuit de la mémoire, vous obtenez plus rapidement le OutOfMemoryException .
procgov.exe -m 100M -c 2 notepad.exe
procgov.exe -m 120M -p 1234Avec les commutateurs --maxws et - minws, vous pouvez contrôler les tailles de jeu de travail maximales et minimales (utilisation de la mémoire physique) du processus. Cette option nécessite SeinCreaseBasePriorityPrivilege , alors assurez-vous que votre compte l'a (plus d'informations dans le numéro 69). Si vous souhaitez limiter la taille de l'ensemble de travail, n'oubliez pas de toujours fournir des valeurs supérieures à zéro pour ces deux paramètres, par exemple:
procgov.exe --minws 1M --maxws 120M -p 1234L'option --MaxJobMem vous permet de spécifier la mémoire engagée maximale pour tous les processus appartenant à un objet de travail donné. Cela peut être pratique lorsque vous activez la propagation du travail aux processus enfants ou que vous utilisez le même objet de travail pour contrôler plusieurs processus, par exemple:
procgov.exe -r --maxjobmem 200M -- cmd.exe
procgov.exe -r --maxjobmem 1G -p 1234,1235,1236Avec le commutateur --CPU, vous pouvez contrôler les cœurs que votre application s'exécutera. Si vous fournissez le numéro de noyau CPU comme valeur décimale , votre application sera autorisée à utiliser le nombre spécifié de cœurs.
Si vous fournissez le numéro de noyau CPU en tant que valeur hexadécimale (avec préfixe 0x) , ce nombre sera traité comme un masque d'affinité dans le premier groupe de processeurs - où chaque bit représente un noyau de CPU (à partir du bit le moins significatif). De plus, vous pouvez prétendre le masque d'affinité avec un numéro de groupe de processeur préfixé avec la lettre «G» et / ou un numéro de nœud NUMA préfixé avec une lettre «n». Vous pouvez également ignorer l'affinité et utiliser l'affinité du nœud ou du processeur NUMA. Valeurs d'exemples valides: n1:g0:0xF , n1:g0 , n1 , g0 .
Le paramètre --CPU peut être défini plusieurs fois et le masque d'affinité final sera une combinaison des masques fournis.
Jetons un coup d'œil à deux exemples d'utilisations sur une application intensive CPU. Dans un premier, nous avons défini la limite de noyau du processeur à deux cœurs:
procgov.exe --cpu=2 TestLimit.exeUn graphique d'utilisation du processeur sur ma machine ressemble comme suit:
Dans une seconde, nous avons réglé le masque d'affinité CPU (avec la notation hexagonale):
procgov.exe --cpu=0x2 TestLimit.exeUn graphique CPU dans ce cas ressemble à la suivante (remarquez que seul le deuxième noyau est utilisé):
Exemples de paramètres d'affinité plus complexes:
# 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 vous ne savez pas quelle configuration de CPU est présente dans le système, vous pouvez exécuter ProCGov sans paramètres et il l'imprimera:
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 740L'option - CPU-CPU vous permet de définir le taux de processeur maximal pour le processus. Si vous définissez également l'affinité CPU, le taux ne s'appliquera qu'aux cœurs sélectionnés. Par exemple, si vous avez huit cœurs CPU logiques sur votre machine et que vous définissez le taux de CPU à 100% et l'affinité CPU sur 0x7 (quatre premiers cœurs), le taux de CPU maximum signalé pour ce processus par les outils de surveillance sera de 50% (nous fonctionnons à pleine capacité mais sur une moitié du numéro CPU).
Avec l'option - timeout, vous pouvez définir le temps maximum (temps d'horloge), le processus peut s'exécuter avant que Procgov ne le termine. Si l'option - réécursive est définie et que le délai d'attente passe, Progov mettra également en fin de tous les processus que les enfants ont commencé dès le début de la session de surveillance.
Les options --process-utime et --job-utime vous permettent de définir une limite au temps d'exécution du mode utilisateur maximum pour un processus (avec l'option - réécursive également tous ses enfants) ou un travail. Ce dernier cas aura un sens avec l'option - réécursive car elle définira une limite sur le temps d'exécution total du mode utilisateur pour le processus et ses enfants.
Le paramètre - priority définit la classe de priorité de processus de processus des processus surveillés. Les valeurs possibles incluent: Idle , BelowNormal , Normal , AboveNormal , High , RealTime . Les trois priorités les plus élevées nécessitent SeinCreaseBasePriorityPrivilege , alors assurez-vous que votre compte l'a (plus d'informations dans le numéro 69).
Avec le commutateur --env, vous pouvez définir des variables d'environnement de processus. Ce commutateur accepte un chemin vers un fichier texte avec les valeurs de variable, par exemple:
COR_ENABLE_PROFILING=0x01
COR_PROFILER={32E2F4DA-1BEA-47ea-88F9-C5DAF691C94A}La commande procgov peut ressembler à la suivante:
procgov.exe --env c: t emp e nv.txt -c 2 dotnet_app.exeVous pouvez définir les variables d'environnement lors du démarrage d'un nouveau processus ou accéder à un processus existant.
Vous pouvez activer les privilèges dans le processus cible avec le commutateur - Enable-privilege . Vous pouvez spécifier plusieurs privilèges en utilisant ce paramètre plusieurs fois, par exemple:
procgov.exe --enable-privilege=SeDebugPrivilege --enable-privilege=SeShutdownPrivilege notepadGardez à l'esprit que dans Windows, vous ne pouvez pas ajouter de nouveaux privilèges au jeton de processus. Vous ne pouvez activer que ceux existants. Vous pouvez vérifier les privilèges de processus disponibles dans le piratage de processus ou l'explorateur de processus. Consultez la documentation pour un privilège donné pour apprendre à le rendre disponible pour un utilisateur donné (par exemple, vous devrez peut-être mettre à jour les politiques de groupe).
Vous trouverez ci-dessous une liste de personnes qui ont contribué à ce projet. Merci!