In Windows PowerShell Wie Kann Man die Maximale CPU % für das Script zu Verwenden?
Ich bin auf der Suche begrenzen den Prozentsatz der CPU-Zeit ein PowerShell-Prozess, um eine bestimmte Anzahl -- um des Arguments Willen, lasst uns vorstellen, es werden 13%.
Anderen Optionen sind nicht genau das, was ich brauche:
1) Einstellung Priorität.
2) Einstellung der CPU-Affinität.
Grundsätzlich, wir haben monitoring-software, die meckert, wenn die gesamte CPU-Auslastung zu hoch wird. Wir haben einen täglichen Prozess, setzt diese aus-meist harmlos, aber zu viele false positives in einem monitoring-system, und die Menschen werden abgehärtet Warnungen/Fehler, wenn wir nicht wollen, dass.
Den Prozess selbst bekommt lsass.exe sehr aufgeregt, auch, wie es läuft und andere Prozesse geschehen, wie gut.
Ich weiß nicht, PowerShell und bin versucht zu beheben, Jemand Anderes Powershell. Offensichtlich eine Boden-up rewrite wäre schön, irgendwann in der Zukunft, aber für jetzt, die Glocken läuten und die lästigen Menschen.
Ich hatte den Eindruck, dass dies ein Handbuch, was Sie tun würde, über den Task-Manager. Wenn das powershell-Skript aus, feuert ab, als Teil eines job-es ist unrealistisch für jemanden da zu sitzen und zu überwachen, task-manager, und legen Sie die Affinität, während es läuft.
InformationsquelleAutor | 2009-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was du fragst ist nicht wirklich möglich. Der Windows-kernel ist verantwortlich für das scheduling der CPU -- und das zu Recht. (Ich will nicht zurück zu real-Modus-DOS).
Die besten können Sie tun ist, legen Sie eine lange Sleep() in zwischen jede Zeile des Skripts. Aber es gibt keine Garantie, dass eine bestimmte Powershell-cmdlet /Funktion /etc. wird die Drosselklappe selbst, wie Sie wollen. Die Windows-API-Aufrufe, letztlich führt jede Anweisung ist eine schmutzige Arbeit, die mit Sicherheit nicht.
Ironisch, Raymond berührte das Thema gerade vor ein paar Tagen: http://blogs.msdn.com/oldnewthing/archive/2009/07/27/9849503.aspx
Mein wirklicher Vorschlag ist, ändern Sie Ihr Skript, so wie es aussieht:
InformationsquelleAutor Richard Berg
Aus meiner Erfahrung, es ist nicht ein Weg festgelegt werden, welcher Prozentsatz der CPU-Powershell verwenden zu können. Ich denke, die beste Vorgehensweise wäre, um die Priorität der Powershell zu Niedrig, um damit andere tasks/Programme zu gehen erste. Ich denke, der erste post hat eine gute Anregung für die Verwendung der Pausen (ich würde upvote, aber ich bin unter den 15-reputation-Punkte, dies zu tun) und das ist etwas, was Sie Aussehen könnte, aber ich glaube nicht, dass es wird geben Ihnen die Kontrolle, die Sie suchen. Sorry, meine Antwort ist mehr eine Anregung, als eine Auflösung.
/matt
InformationsquelleAutor Matt Dewey
Ich bezweifle es ist ein besonders einfacher Weg, das zu erreichen, was Sie fordern. Wenn die CPU-Sorge ist eine große Sache, die ich kombinieren würde ein paar Taktiken und lassen dem Planer kümmern sich um den rest - es ist eigentlich ziemlich gut bei der Verwaltung der Auslastung.
Den Vorschlag mit ThreadPriority ist ein bisschen problematisch, da PowerShell mit spawn jeden neuen Befehl in einem neuen Thread, das könnte man umgehen, indem man alles gekapselt in einer einzigen Zeile, ein cmdlet oder eine Funktion von einer Art sein. Besser, senden die ganze powershell-Prozess, um im Leerlauf:
Hinweis: das senden ALLE powershell-Instanzen im Leerlauf, die möglicherweise nicht den gewünschten Effekt. Und sicherlich nicht verhindern, dass ein Skript aus, durch die Steigerung der eigenen Priorität.
Auch, wie hier erwähnt - littering den code mit sleep-Befehlen kann ein effizienter Weg, um sicherzustellen, dass andere Prozesse genügend CPU-Zeit für die Bearbeitung von code. Sogar 50-100ms ist fast schon eine Ewigkeit auf einen Prozessor.
Zwischen diesen beiden Taktiken, die Ihr Skript wird ausgeführt, wenn es verfügbar ist, und freundlicherweise den Bogen zu anderen CPU-Anforderungen, wie Sie entstehen.
InformationsquelleAutor Goyuix
Während ich kenne keinen Weg, um tatsächlich beschränken Sie die Nutzung eines Prozesses zu einer bestimmten Höhe der CPU-Verbrauch durch prozentuale, ich dachte mir, vielleicht könnte man ändern Sie die Priorität des PowerShell-thread. Also schrieb ich eine schnelle Skript und ein test lief.
Das Ergebnis war, dass in den beiden "Normalen" und die "Niedrigste", die Zeit war in etwa gleich. Ein Blick auf die CPU meter widget, das die CPU-Auslastung genommen wurde ungefähr 27%, aber ich lief auf einem quad-core-box, also ist das nicht verwunderlich. Es war unter alle von einer CPU in beiden Fällen. Meine Maschine war nicht viel anderes tun als an der Zeit, das war also die anderen 2%, Schätze ich.
Vielleicht die Ergebnisse variieren auf einem belebteren Maschine.
Hier ist das Skript:
Und hier ist das Ergebnis:
Beachten Sie auch, dass in der Dokumentation für
Thread.Priority
heißt es:InformationsquelleAutor Lee
Eine Möglichkeit kann sein, mit
process lasso
. Ich habe nur positive Ergebnisse über die automatische Drosselung der Prozesse nicht ausgeschlossen von mir, wenn die CPU-Auslastung übertrifft einen bestimmten Prozentsatz.Beachten Sie, dass es ist eine ziemlich begrenzte Kostenlose version, die Sie verwenden können, um zu testen, ob es für Sie arbeitet.
PS: ich arbeite nicht für jedermann. Ich bin nur ein Programm anzubieten, das hat bei mir geklappt in der Vergangenheit.
InformationsquelleAutor Christopher Hauck