Dans Windows PowerShell, Comment Pouvez-Vous Régler le nombre Maximum de CPU en % pour le Script à Utiliser?
Je suis à la recherche pour limiter le pourcentage de temps PROCESSEUR utilisé par un processus PowerShell pour un certain nombre, pour la clarté de l'exposé, nous allons imaginer que ce soit de 13%.
D'autres options qui ne sont pas précisément ce dont j'ai besoin:
1) définition de la priorité.
2) définir l'affinité CPU.
Fondamentalement, nous avons un logiciel de surveillance qui se plaint si le total de l'utilisation du PROCESSEUR est trop élevée. Nous avons un processus quotidien qui définit ce hors-la plupart du temps sans danger, mais beaucoup trop de faux positifs dans un système de surveillance et les gens sont habitués pour les avertissements d'erreurs lorsque nous ne souhaitons pas que.
Le processus lui-même est lsass.exe très excité, trop, comme elle s'exécute, et d'autres processus, en tant que bien.
Je ne sais pas PowerShell et je suis d'essayer de corriger Quelqu'un d'Autre Powershell. De toute évidence, un rez-de-réécriture serait bien dans le futur, mais pour l'instant, les cloches sonnent et les gens ennuyeux.
J'étais sous l'impression que c'est un manuel chose que vous feriez dans le Gestionnaire des Tâches. Si ce script powershell déclenche dans le cadre d'un travail, c'est irréaliste pour quelqu'un de s'asseoir et de surveiller le gestionnaire des tâches et définir l'affinité alors qu'il est en cours d'exécution.
OriginalL'auteur | 2009-08-06
Vous devez vous connecter pour publier un commentaire.
Ce que vous demandez n'est pas vraiment possible. Le noyau de Windows est en charge de la planification de la CPU -- et à juste titre. (Je ne veux pas retourner en mode réel DOS).
Le meilleur que vous pouvez faire est d'insérer un long Sommeil() entre chaque ligne du script. Mais il n'y a aucune garantie que l'applet de commande Powershell /fonction /etc seront de l'accélérateur lui-même la façon dont vous le souhaitez. Les appels d'API Windows qui en fin de compte exécution de chaque instruction sale travail ne sera certainement pas.
Ironiquement, Raymond abordé ce sujet il y a quelques jours: http://blogs.msdn.com/oldnewthing/archive/2009/07/27/9849503.aspx
Vraiment ma suggestion est de modifier votre script de sorte qu'il ressemble:
OriginalL'auteur Richard Berg
De mon expérience, il n'y a pas un moyen de préciser quel est le pourcentage de la CPU Powershell aurez à utiliser. Je pense que le meilleur plan d'action serait de définir la priorité de Powershell pour Faible pour permettre à d'autres tâches et des programmes pour y aller en premier. Je pense que le premier post a une bonne suggestion de l'utilisation de la mettre en pause (j'avais upvote, mais je suis en dessous de 15 points de réputation pour le faire) et c'est quelque chose que vous devriez regarder dans, mais je ne pense pas que cela va vous donner le contrôle que vous cherchez. Désolé de ma réponse, c'est plus une suggestion qu'une résolution.
/matt
OriginalL'auteur Matt Dewey
Sincèrement, je doute qu'il y est un simple particulier pour accomplir ce que vous demandez. Si CPU préoccupation est une grosse affaire, je serait de combiner un couple de tactiques et de laisser le planificateur de prendre soin de tout le reste - c'est en fait assez bon dans la gestion de la charge.
La suggestion à l'aide de ThreadPriority est un peu problématique car PowerShell avec spawn à chaque nouvelle commande dans un nouveau Fil de discussion, vous pourriez obtenir environ en ayant tout encapsulé sur une seule ligne, une applet de commande ou une fonction quelconque. Mieux envoyer l'ensemble du processus powershell au ralenti:
Note: qui va envoyer TOUS les powershell cas d'inactivité, ce qui peut ne pas être l'effet désiré. Et n'est certainement pas à empêcher les scripts de l'augmentation de sa propre priorité.
Également, comme indiqué ci - jonchent votre code avec le sommeil, les commandes peuvent être un moyen efficace de faire en sorte que d'autres processus ont amplement le temps CPU pour le traitement de leur code. Même 50-100 ms est presque une éternité pour un processeur.
Entre ces deux tactiques de votre script sera exécuté quand il est disponible, et par la grâce de la proue à d'autres CPU demandes à mesure qu'ils surviennent.
OriginalL'auteur Goyuix
Alors que je ne connais aucun moyen de limiter l'utilisation de tout processus, à un montant donné de l'UC à la consommation en pourcentage, j'ai pensé que peut-être on pourrait modifier la priorité de la PowerShell fil. J'ai donc écrit un script vite fait et a couru un test.
Le résultat a été que, dans les deux "Normal" et "plus Bas", le temps était la même. En regardant le compteur CPU widget, l'utilisation de l'UC pris a été d'environ 27%, mais j'ai été en cours d'exécution sur un processeur quad core zone, ce qui n'est pas surprenant. Il a été de prendre tout un CPU dans les deux cas. Ma machine n'était pas de faire grand chose d'autre à l'époque, c'était donc l'autre 2%, je pense.
Peut-être les résultats varient sur une intense activité de la machine.
Voici le script:
Et voici le résultat:
Notez également que dans la documentation de
Thread.Priority
il déclare:OriginalL'auteur Lee
Une possibilité peut-être à l'aide de
process lasso
. J'ai rien eu, mais des résultats positifs au cours automatique de limitation de processus qui ne sont pas exclus par moi-même lors de l'utilisation du PROCESSEUR dépasse un certain pourcentage.Garder à l'esprit qu'il existe une assez limitée version gratuite que vous pouvez utiliser pour tester si cela fonctionne pour vous.
PS: je ne suis pas de travail pour tout le monde. Je suis juste en proposant un programme qui a fonctionné pour moi dans le passé.
OriginalL'auteur Christopher Hauck