Любой, кто запускает задания в планировщике заданий Windows, рано или поздно сталкивается с необъяснимыми различиями во времени выполнения. PHP-скрипт, который в командной строке выполняется за 5 минут, при запуске через планировщик заданий Windows внезапно занимает 20 минут. Тот же пользователь, те же права доступа, тот же код — время выполнения в четыре раза больше. Что же происходило?
После нескольких часов отладки, сеансов мониторинга процессов и бесчисленных сравнений конфигураций решение оказалось пугающе простым: планировщик заданий Windows устанавливает более низкий приоритет процесса по умолчанию. Значение по умолчанию для задач в планировщике заданий: 7 (ниже нормы), не 4-6 (Нормально) Как и ожидалось. Эта, казалось бы, небольшая разница может привести к значительному снижению производительности при выполнении операций с интенсивным вводом-выводом.
Подробные уровни приоритета Windows ::
| Ценить | Приоритет | Описание |
|---|---|---|
| 0 | В реальном времени | Наивысший приоритет (внимание!) |
| 1 | Высокий | Высокий приоритет |
| 2-3 | Выше нормы | О нормальном |
| 4-6 | Нормальный | Стандарт для интерактивных процессов |
| 7 | Ниже нормы | ПО УМОЛЧАНИЮ в планировщике задач |
| 8-9 | Ниже нормы | Еще ниже |
| 10 | Праздный | Самый низкий приоритет |
Проблема с приоритетом при планировании задач имеет многоуровневую структуру: когда вы экспортируете задачу и просматриваете XML, вы часто видите, нет Установка приоритета. После этого Windows будет автоматически использовать значение по умолчанию. 7. Графический интерфейс отображает это значение во время экспорта, но оно не сохраняется явно в задаче. Низкий приоритет не только приводит к уменьшению процессорного времени, но и:
- Регулируемые дисковые операции ввода-вывода
- Более низкий сетевой приоритет
- Плохое кэширование файловой системы
- Задержки в доступе к базе данных
Даже если вы используете того же пользователя и включите «Запустить с наивысшими привилегиями», задача выполняется в другой среде Windows Station/Desktop с другими приоритетами. Чтобы определить проблему, вы можете использовать PowerShell для составления списка всех задач с указанием их фактических приоритетов.:
38b7fa6c77dc344401485cd338ea4128
Почти все мои задачи выполнялись с приоритетом 7. Теперь мы целенаправленно корректируем приоритет нескольких задач одновременно.:
38b7fa6c77dc344401485cd338ea4128
После установки приоритета 4 (Обычно) мой PHP-скрипт снова запустился через ожидаемые 300 секунд. Если вы настроили задачи для определённой учётной записи пользователя, вы также можете легко указать это в строке 10 следующим образом.:
38b7fa6c77dc344401485cd338ea4128