У меня есть запланированное задание, которое сильно загружает процессор и ввод-вывод и занимает около четырех часов (сборка исходного кода, если вам интересно). Задача представляет собой скрипт Powershell, который порождает различные подпроцессы для выполнения своей работы. Когда я запускаю тот же процесс в интерактивном режиме из приглашения Powershell, используя ту же учетную запись пользователя, он выполняется примерно через два с половиной часа. Задача выполняется на Windows Server 2008 R2.
Что я хочу знать, так это то, почему выполнение запланированной задачи занимает намного больше времени - более часа. Одна вещь, которую я заметил, заключается в том, что планировщик задач работает с приоритетом ниже обычного, поэтому при запуске моей задачи он наследует тот же пониженный приоритет. Однако я обновил скрипт, чтобы вернуть приоритет процесса Powershell в значение Normal, и это все равно занимает столько же времени.
У кого-нибудь есть идея, что может отличаться между этими двумя сценариями? Я исключил различия в загрузке процессора и ввода-вывода - эта задача - единственное, для чего используется система, поэтому больше ничего не работает, чтобы конкурировать за ресурсы.
Ответы:
Похоже, что здесь работает не только «обычный» приоритет процесса. Как я отмечал в этом вопросе, планировщик задач по умолчанию запускает вашу задачу с приоритетом ниже обычного. В этом вопросе о StackOverflow описывается, как исправить любую задачу, выполняемую с обычным приоритетом, но это исправление оставляет одну вещь немного другой: приоритет памяти. Приоритет памяти был новой функцией для Windows Vista и описан в этой статье Technet . Вы можете увидеть приоритет памяти, используя Process Explorer , который является обязательным инструментом для любого администратора или программиста.
В любом случае, даже с исправлением приоритета запланированной задачи приоритет памяти вашей задачи установлен на 4, что на одну ступень ниже нормального значения 5. Когда я вручную повысил приоритет памяти для своей задачи до 5, производительность была включена. наравне с запуском процесса в интерактивном режиме.
Информацию о повышении приоритета см. В моем ответе на связанный вопрос StackOverflow о приоритете ввода-вывода; установка приоритета памяти выполняется аналогично, через NtSetInformationProcess, с
PROCESS_INFORMATION_CLASS
установленным значениемProcessMemoryPriority
(значение этого параметра равно 39 или 0x27). Я мог бы сделать бесплатную утилиту, которая может быть использована для установки этого, если другие нуждаются в этом и не имеют доступа к инструментам программиста.РЕДАКТИРОВАТЬ: я пошел дальше и написал бесплатную утилиту для запроса и установки приоритета памяти задачи, доступную здесь . Загрузка содержит как исходный код, так и скомпилированный двоичный файл.
источник
Проблема в том, что ваш процесс начинается с низкого приоритета ввода-вывода и низкого приоритета памяти. Самый простой способ убедиться в этом - использовать Process Explorer от sysinternals. Если вы посмотрите на свойства любого из процессов, которые были созданы из этой запланированной задачи, вы увидите, что у нее низкий приоритет ввода-вывода и приоритет памяти 2.
Вот решение этой проблемы:
<Priority>7</Priority>
К сожалению, нет способа изменить начальный приоритет запланированных задач из графического интерфейса.
источник
The format of the task is not valid. The following error was reported: (1,2)::
. Сохранение файла в ANSI разрешит его для меня.Если вы установите его для запуска в качестве запланированной задачи от имени пользователя X, а затем войдете в систему как пользователь X, прежде чем он должен запуститься, он должен открыть окно в вашем сеансе, когда он запустится, он будет запущен в вашем сеансе.
Если вы это сделаете, это займет больше или меньше времени? Я не знаю, что это будет значить, но это может быть полезным отличием. Может ли быть доступ к сети, который есть у учетной записи пользователя при входе в систему, но не при запуске в качестве запланированной задачи, для которой требуется время ожидания и сбой? Отличается ли поведение, если вы создаете новую учетную запись пользователя и запускаете ее как запланированную задачу под этой учетной записью?
Еще одна идея: когда вы запускаете его как запланированное задание - теперь, когда вы установили приоритет в вашем скрипте, все подпроцессы выполняются как «Нормальный» или «Ниже-Нормальный»?
источник
Возможно, запланированные задачи выполняются с более низким приоритетом по умолчанию.
Используйте,
prio
чтобы заставить более высокий приоритет.источник
сначала - вы можете использовать приоритет выше обычного (например, высокий)
во-вторых, вы должны понимать, что передняя сессия требует некоторых ресурсов, в основном ввода-вывода жесткого диска и памяти, поэтому запланированное задание становится меньше. для четкого теста вы должны выйти из системы во время работы сценария powershell
а также вы можете попробовать добавить больше памяти / использовать ramdrive / split работу на нескольких жестких дисках для ускорения процессов
источник
Этот вопрос давно задан и для windows server 2008R2. У меня был тот же вопрос, но для Windows 10. В Windows 10 (проверено на 1703 и 1809) достаточно просто установить «Приоритет» на 4 через импортированный XML, чтобы дать вам тот же Базовый приоритет, Динамический приоритет, Приоритет ввода-вывода и приоритет памяти как интерактивно запущенный процесс.
источник
Вот фрагмент powershell для установки приоритета (работает в удаленном сеансе powershell!):
источник