Czy istnieje sposób skonfigurowania procesu usługi Windows (np. SquidNT, SQL Server itp.), Aby uruchamiał się automatycznie z niskim priorytetem bez ręcznej zmiany priorytetu procesu za pomocą Menedżera zadań?
Czy istnieje sposób skonfigurowania procesu usługi Windows (np. SquidNT, SQL Server itp.), Aby uruchamiał się automatycznie z niskim priorytetem bez ręcznej zmiany priorytetu procesu za pomocą Menedżera zadań?
Odpowiedzi:
Menedżer sterowania usługami, który obsługuje uruchamianie / zatrzymywanie usług, nie ma żadnego mechanizmu (w żadnej wersji systemu Windows do tej pory) określającego priorytet uruchomionych procesów.
Ponieważ możesz zmienić priorytet w już działającym procesie, najlepszym rozwiązaniem może być użycie do tego narzędzia.
Nie znam narzędzia wiersza polecenia Microsoft do modyfikowania priorytetu procesu, ale również wiersz polecenia „PV” dostępny pod adresem http://www.teamcti.com/pview/prcview.htm ma funkcję ustawiania priorytetu .
pv -pb process-name.exe
Ustawiłoby to „process-name.exe” na priorytet „Poniżej normalnego”.
Jeśli możesz żyć z procesem zaczynającym się od „Normalnego” priorytetu, dopóki nie zaczniesz go zmieniać, możesz to zrobić za pomocą skryptu działającego jako „Zaplanowane zadanie”, aby uruchamiać się tak często (na wypadek, gdyby usługa została uruchomiona odbity).
To szybki i brudny hack, ale wiele mojego życia zawdzięczam szybkim i brudnym hackom, które wykonują zadanie!
Powyższe odpowiedzi nie działały dla mnie. Zakończyłem tworzenie następującego skryptu PowerShell:
ChangePriority.ps1
Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}
A potem stworzyłem zaplanowane zadanie, które wywołuje je co 5 minut. Z poziomu monitu administratora lub skryptu wsadowego:
schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""
Próbowano użyć, wmicjak omówiono tutaj, aby zaplanowane zadanie nie zależało od pliku, nie powiodło się. Podobnie jest przy użyciu skryptu PowerShell: nie byłem w stanie po prostu utworzyć pojedynczego polecenia, które po prostu utworzyło zadanie za pomocą wbudowanego skryptu. Doceniany, jeśli udało się to zrobić i dodać kolejną odpowiedź.
Wartości priorytetu w skrypcie PowerShell można znaleźć tutaj [1].
Mogą również działać następujące elementy. Edytuj klucz rejestru ImagePath i użyj polecenia start z cmd.exe:
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
ImagePathmusi respektować interfejs usług Windows i startnie implementuje się, ani nie przekierowuje go do uruchamianego pliku wykonywalnego.
Musiałem to zrobić, aby teamcity pobierało mniej jednostek centralnych. A ponieważ teamcity jest jedyną uruchomioną aplikacją Java, to rozwiązanie działa idealnie.
Utwórz plik wsadowy, który uruchomi usługę, i obniż priorytet, na przykład:
net start tcbuildagent proces
net start teamcity
wmic gdzie name = "java.exe" CALL setpriority "poniżej normy"
Skonfigurowałem wyzwalacz TaskScheduler z 1-minutowym opóźnieniem, aby nie zakłócać uruchamiania innych usług.
ps możesz również ustawić uruchamianie wszystkich usług jako ręczne i użyć tego pliku wsadowego, aby uruchomić je wszystkie w żądanej kolejności! SQL, IIS itp.