Jak skonfigurować proces usługi Windows, aby działał z niskim priorytetem?
17
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ń?
Zmiana priorytetu wątków lub procesów jest zwykle złym pomysłem, chyba że kod został napisany tak, aby działał z innym priorytetem. Zmiana priorytetów dodaje „odwrócenie priorytetu” do listy problemów współbieżności, których należy unikać.
Richard
1
OP nie zapytał, czy to dobry pomysł, czy nie. OP zapytał, czy można to zrobić i jak . - Pamiętaj, aby pozostać na temat. 😉
BrainSlugs83
Odpowiedzi:
11
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!
Być może uruchom plik wsadowy, aby uruchomić aplikację, a następnie ustaw priorytet procesu, może z krótką przerwą między nimi, zamiast bezpośrednio uruchamiać aplikację, a następnie uruchamiać inne zadanie w celu ustawienia priorytetu. Nie zadziała na wszystko, ale warto spróbować.
John Gardeniers
3
Powyższe odpowiedzi nie działały dla mnie. Zakończyłem tworzenie następującego skryptu PowerShell:
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].
Bardzo przydatne. Zerwałem linię ze swoimi słabymi umiejętnościami ps, aby ustawić usługę audio zawierającą proces hosta usługi na czas rzeczywisty, aby zapobiec trzaskaniu dźwięku podczas intensywnego użycia procesora (chyba złe sterowniki). Działa świetnie!
JasonXA,
@JasonXA Nie ma za co. Doceniany, jeśli możesz podać wersję w jednym wierszu, czego nie mogłem
ceztko,
Pewnie: PowerShell.exe -noprofile -executionpolicy bypass -command "& {Get-WmiObject Win32_service -Filter \" Name = 'AudioSrv' \ "| ForEach {Get-WmiObject Win32_process -Filter \" ProcessId = $ ($ _. ProcessId) \ "} | ForEach-Object {$ _. SetPriority (256)}}" Nie wiem, jak ma rację ... ale działa. Nie udało mi się sprawić, by działał ukryty, może działać tylko w ramach konta użytkownika z uprawnieniami administratora.
JasonXA,
1
Mogą również działać następujące elementy. Edytuj klucz rejestru ImagePath i użyj polecenia start z cmd.exe:
Niestety to w ogóle nie działa, ponieważ uruchamiany plik wykonywalny ImagePathmusi respektować interfejs usług Windows i startnie implementuje się, ani nie przekierowuje go do uruchamianego pliku wykonywalnego.
ceztko
0
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.
Ustaw usługę jako „ręczną” podczas uruchamiania.
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"
Utwórz zadanie „harmonogramu zadań” uruchamiane podczas „uruchamiania systemu Windows”, które uruchomi ten plik wsadowy.
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.
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 .
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!
źródło
Powyższe odpowiedzi nie działały dla mnie. Zakończyłem tworzenie następującego skryptu PowerShell:
ChangePriority.ps1
A potem stworzyłem zaplanowane zadanie, które wywołuje je co 5 minut. Z poziomu monitu administratora lub skryptu wsadowego:
Próbowano użyć,
wmic
jak 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].
[1] https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/setpriority-method-in-class-win32-process
źródło
Mogą również działać następujące elementy. Edytuj klucz rejestru ImagePath i użyj polecenia start z cmd.exe:
źródło
ImagePath
musi respektować interfejs usług Windows istart
nie 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.
źródło
Możesz wykonać następujący skrypt programu PowerShell, umieścić go w zaplanowanym zadaniu uruchamianym podczas uruchamiania.
źródło