Кожен, хто запускає завдання в Планувальнику завдань Windows, рано чи пізно зіткнеться з незрозумілими відмінностями під час виконання. PHP-скрипт, який виконується за 5 хвилин у командному рядку, раптово виконується за 20 хвилин через Планувальник завдань Windows. Той самий користувач, ті самі дозволи, той самий код – у чотири рази довше, ніж час виконання. Що відбувалося?
Після годин налагодження, сеансів моніторингу процесів та незліченних порівнянь конфігурацій рішення виявилося лякаюче простим: Планувальник завдань Windows за замовчуванням встановлює нижчий пріоритет процесу. Значення за замовчуванням для завдань у Планувальнику завдань: 7 (Нижче норми), не 4-6 (Нормально), як і очікувалося. Ця, здавалося б, невелика різниця може призвести до значного зниження продуктивності в операціях з інтенсивним вводом/виводом.
Детальний опис рівнів пріоритету Windows наведено нижче.:
| Значення | Пріоритет | Опис |
|---|---|---|
| 0 | У режимі реального часу | Найвищий пріоритет (обережно!) |
| 1 | Високий | Високий пріоритет |
| 2-3 | Вище норми | Про нормальний |
| 4-6 | Звичайний | Стандарт для інтерактивних процесів |
| 7 | Нижче норми | ЗА ЗАМОВЧАННЯМ у планувальнику завдань |
| 8-9 | Нижче норми | Ще нижче |
| 10 | Холостий хід | Найнижчий пріоритет |
Проблема з пріоритетом у плануванні завдань є багаторівневою: коли ви експортуєте завдання та переглядаєте XML-файл, ви часто ні Налаштування пріоритету. Після цього Windows непомітно використовуватиме значення за замовчуванням 7. Графічний інтерфейс відображає це значення під час експорту, але воно явно не зберігається в завданні. Нижчий пріоритет не лише призводить до меншого часу процесора, але й:
- Операції вводу-виводу диска з обмеженим доступом
- Нижчий пріоритет мережі
- Погане кешування файлової системи
- Затримки в доступі до бази даних
Навіть якщо ви використовуєте того самого користувача та ввімкнули опцію «Запускати з найвищими правами», завдання виконується в іншому середовищі станції/робочого столу Windows з іншими пріоритетами. Щоб визначити проблему, можна скористатися PowerShell, щоб отримати список усіх завдань з їхніми фактичними пріоритетами.:
38b7fa6c77dc344401485cd338ea4128
Майже всі мої завдання виконувалися з пріоритетом 7. Тепер ми спеціально коригуємо пріоритет кількох завдань одночасно:
38b7fa6c77dc344401485cd338ea4128
Після встановлення пріоритету 4 (Зазвичай) мій PHP-скрипт знову запустився через очікувані 300 секунд. Якщо ви налаштували завдання з певним обліковим записом користувача, ви також можете легко вказати це в рядку 10 наступним чином.:
38b7fa6c77dc344401485cd338ea4128