Любой, кто запускает задания в планировщике заданий 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