Есть ли способ настроить процесс службы Windows (например, squidNT, SQL Server и т. Д.) Для автоматического запуска с низким приоритетом без изменения приоритета процесса вручную с помощью диспетчера задач?
Диспетчер управления службами, который обрабатывает запуск / остановку служб, не имеет никакого механизма (до сих пор ни в одной из версий Windows) для определения приоритета запускаемых им процессов.
Поскольку вы можете изменить приоритет уже запущенного процесса, лучше всего использовать для этого инструмент.
Мне неизвестен инструмент командной строки Microsoft для изменения приоритета процесса, но командная строка «PV» тоже доступна по адресу http://www.teamcti.com/pview/prcview.htm имеет функцию установки приоритета.
pv -pb process-name.exe
Это установит для "process-name.exe" приоритет "Ниже нормального".
Если вы можете жить с процессом, начинающимся с приоритетом «Нормальный», пока не дойдете до его изменения, вы можете сделать это с помощью сценария, работающего как «Запланированная задача», чтобы запускать его время от времени (в случае, если служба получает отскочил).
Это быстрый и грязный прием, но я многим обязан в жизни быстрым и грязным приемам, которые делают свою работу!
Приведенные выше ответы не помогли мне. Я закончил создание следующего сценария PowerShell:
ChangePriority.ps1
Get-WmiObject Win32_process -Filter 'name="ProcessName.exe"' | ForEach-Object {$_.SetPriority(128)}
А затем я создал запланированное задание, которое вызывает его каждые 5 минут. Из Администратор приглашение или пакетный сценарий:
schtasks /Create /tn "Process Priority Change" /sc MINUTE /mo 5 /ru SYSTEM /tr "powershell -noprofile -executionpolicy bypass -file \"%cd%\ChangePriority.ps1\""
Попытка использовать wmic
как обсуждалось Вот сделать запланированное задание вне зависимости от файла не удалось. Аналогично с использованием сценария PowerShell: я не смог просто создать одну команду, которая просто создает задачу с помощью встроенного сценария. Буду признателен, если вам удалось это сделать, и добавить еще один ответ.
Значения приоритета в сценарии PowerShell можно найти здесь [1].
Следующее также может работать. Отредактируйте раздел реестра ImagePath и используйте команду запуска из cmd.exe:
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
Мне пришлось это сделать, чтобы teamcity занимала меньше ЦП. И поскольку teamcity - единственное запущенное нами Java-приложение, это решение работает отлично.
Создайте командный файл, который запустит вашу службу и снизит приоритет, например:
чистый старт tcbuildagent
чистый старт teamcity
wmic процесс, где name = "java.exe" CALL setpriority "ниже обычного"
Я настроил триггер TaskScheduler с задержкой в 1 минуту, чтобы не мешать запуску других служб.
p.s. вы также можете настроить запуск всех ваших сервисов как ручной и использовать этот командный файл для запуска всех из них в нужном вам порядке! SQL, IIS и т. Д.
Вы можете включить следующий сценарий PowerShell в запланированную задачу, которая запускается при запуске.
do {
start-sleep -s 5
$obj = Get-WmiObject Win32_process -Filter 'name="processname"'
} while ($obj -eq $null)
$obj.SetPriority(16384)