Чи є спосіб налаштувати сервісний процес Windows (наприклад, squidNT, SQL Server тощо), щоб автоматично почати з низьким пріоритетом, не змінюючи пріоритет процесу вручну за допомогою диспетчера завдань?
Чи є спосіб налаштувати сервісний процес Windows (наприклад, squidNT, SQL Server тощо), щоб автоматично почати з низьким пріоритетом, не змінюючи пріоритет процесу вручну за допомогою диспетчера завдань?
Відповіді:
Менеджер управління сервісом, який обробляє послуги запуску / зупинки, не має жодного механізму (у будь-якій версії Windows, раніше), щоб вказати пріоритет у процесах, які він починає.
Оскільки ви можете змінити пріоритет у вже запущеному процесі, найкращим варіантом може бути використання інструменту для цього.
Мені не відомий інструмент командного рядка Microsoft для зміни пріоритету процесу, але командний рядок "PV" теж доступний на веб- сайті http://www.teamcti.com/pview/prcview.htm, який має функцію встановлення пріоритету .
pv -pb process-name.exe
Це встановило б "process-name.exe" пріоритетом "Нижче звичайного".
Якщо ви можете жити з процесом, який починається з пріоритету "Нормальний", поки ви не увійдете в його зміну, ви можете зробити це зі сценарієм, який працює як "Заплановані завдання", щоб звільнити все так часто (у випадку, якщо служба отримує відскочив).
Це швидкий і брудний злом, але я багато свого життя в житті завдячую швидким і брудним хакам, які отримують роботу!
Наведені вище відповіді не працювали для мене. Я закінчив створення наступного сценарію повноважень:
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
як обговорювалося тут, для того, щоб зробити заплановане завдання, не залежно від файлу, не вдалося. Подібний сценарій за допомогою скрипта повноважень: мені не вдалося створити єдину команду, яка просто створила завдання з вбудованим сценарієм. Вдячний, якщо вам вдалося це зробити і додати ще одну відповідь.
Значення пріоритету в скрипті повноважень можна знайти тут [1].
Наступне також може спрацювати. Відредагуйте ключ реєстру ImagePath і скористайтеся командою start від cmd.exe:
START ["title"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]
ImagePath
повинен відповідати інтерфейсу для служб Windows, а start
також не реалізовувати і не спрямовувати це до запущеного виконуваного файлу.
Мені довелося це зробити, щоб згуртувати менше процесора. І, оскільки teamcity - єдиний додаток Java, який ми запускаємо, це рішення працює чудово.
Створіть пакетний файл, який запустить вашу послугу, і зменшіть пріоритет, наприклад:
net start tcbuildagent
net start teamcity
wmic процес, де name = "java.exe" CALL setpriority "нижче норми"
Я налаштував тригер TaskScheduler із затримкою на 1 хвилину, щоб не перешкоджати запуску інших служб.
ps Ви також можете встановити всі ваші сервісні запуски як ручні та використовувати цей пакетний файл, щоб запустити їх у потрібному порядку! SQL, IIS тощо.