Gibt es eine Möglichkeit, einen Windows-Dienstprozess (z. B. squidNT, SQL Server usw.) so zu konfigurieren, dass er automatisch mit niedriger Priorität gestartet wird, ohne die Prozesspriorität manuell über den Task-Manager zu ändern?
Gibt es eine Möglichkeit, einen Windows-Dienstprozess (z. B. squidNT, SQL Server usw.) so zu konfigurieren, dass er automatisch mit niedriger Priorität gestartet wird, ohne die Prozesspriorität manuell über den Task-Manager zu ändern?
Antworten:
Der Dienststeuerungs-Manager, der das Starten / Beenden von Diensten verwaltet, verfügt (in keiner früheren Windows-Version) über einen Mechanismus, mit dem die Priorität der von ihm gestarteten Prozesse festgelegt werden kann.
Da Sie die Priorität eines bereits ausgeführten Prozesses ändern können, empfiehlt es sich, hierfür ein Tool zu verwenden.
Mir ist kein Microsoft-Befehlszeilentool zum Ändern der Prozesspriorität bekannt, aber die "PV" -Befehlszeile unter http://www.teamcti.com/pview/prcview.htm enthält eine Funktion zum Festlegen der Priorität .
pv -pb process-name.exe
Das würde "process-name.exe" auf "Below Normal" setzen.
Wenn Sie damit leben können, dass der Prozess mit der Priorität "Normal" beginnt, bis Sie sich daran gewöhnt haben, ihn zu ändern, können Sie dies mit einem Skript tun, das als "Geplante Aufgabe" ausgeführt wird und das gelegentlich ausgelöst wird (falls der Dienst abruft) abgeprallt).
Es ist ein schneller und schmutziger Hack, aber ich verdanke einen Großteil meines Lebens durch schnelle und schmutzige Hacks, die den Job erledigen!
Die obigen Antworten haben bei mir nicht funktioniert. Ich habe die Erstellung des folgenden Powershell-Skripts beendet:
ChangePriority.ps1
Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}
Und dann habe ich eine geplante Aufgabe erstellt, die alle 5 Minuten aufgerufen wird. In der Administrator- Eingabeaufforderung oder im Batch-Skript:
schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""
Versuchte zu verwenden , wmic
wie besprochen hier , um die geplante Aufgabe nicht auf die Datei fehlgeschlagen zu machen abhängig. Ähnliches mit dem Powershell-Skript: Ich konnte nicht nur einen einzelnen Befehl erstellen, der nur eine Aufgabe mit dem Inline-Skript erstellt. Würdigt, wenn Sie es geschafft haben und eine weitere Antwort hinzufügen.
Werte für die Priorität im Powershell-Skript finden Sie hier [1].
Folgendes könnte auch funktionieren. Bearbeiten Sie den ImagePath-Registrierungsschlüssel und verwenden Sie den Startbefehl von cmd.exe:
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
ImagePath
die Schnittstelle für Windows-Dienste start
berücksichtigen muss und diese nicht implementiert oder an die zu startende ausführbare Datei weiterleitet.
Ich musste das tun, damit teamcity weniger CPU nimmt. Und da teamcity die einzige Java-App ist, die wir ausführen, funktioniert diese Lösung perfekt.
Erstellen Sie eine Batch-Datei, die Ihren Dienst startet, und senken Sie die Priorität wie folgt:
net start tcbuildagent
net start teamcity
wmic prozess wobei name = "java.exe" CALL setpriority "below normal"
Ich habe den TaskScheduler-Trigger mit einer Verzögerung von 1 Minute konfiguriert, um den Start anderer Dienste nicht zu beeinträchtigen.
PS Sie können auch festlegen, dass alle Dienste manuell gestartet werden, und diese Batch-Datei verwenden, um alle in der von Ihnen gewünschten Reihenfolge zu starten. SQL, IIS usw.