프로세스가 대화식으로 수행되는 것보다 예약 된 작업으로 느리게 실행


41

CPU 및 IO를 많이 사용하는 예약 된 작업이 있으며 실행하는 데 약 4 시간이 걸립니다 (호기심이있는 경우 소스 코드 작성). 이 작업은 다양한 하위 프로세스를 생성하여 작업을 수행하는 Powershell 스크립트입니다. 동일한 사용자 계정으로 Powershell 프롬프트에서 동일한 프로세스를 대화식으로 실행하면 약 2 시간 30 분 안에 실행됩니다. 작업이 Windows Server 2008 R2에서 실행 중입니다.

내가 알고 싶은 것은 예약 된 작업으로 실행하는 데 시간이 더 오래 걸리는 이유입니다. 내가 알았던 한 가지 작업 스케줄러는 보통 이하의 우선 순위로 실행되므로 내 작업이 시작되면 동일한 낮은 우선 순위를 상속합니다. 그러나 Powershell 프로세스 우선 순위를 다시 보통으로 설정하도록 스크립트를 업데이트했으며 여전히 오래 걸립니다.

두 시나리오에서 무엇이 다를 수 있는지 아는 사람이 있습니까? 프로세서와 IO로드의 차이점을 배제했습니다.이 작업은 시스템이 사용하는 유일한 작업이므로 리소스를 놓고 경쟁 할 수있는 다른 작업은 없습니다.


업데이트가 있습니까? 당신이 무엇을 찾을 수 있는지 궁금합니다.
mfinni

내가 생각하는 것이 원인이라고 생각했습니다. 아래 내 답변을 참조하십시오.
Charlie

Windows 10 Fall Creators 현재이 문제는 여전히 존재하며 @Jason Mathison의 해결 방법 (작업 스케줄러 .xml 파일 편집)이 여전히 가장 좋은 솔루션입니다.
BSalita

답변:


36

여기서는 "일반적인"프로세스 우선 순위 이상의 작업이있는 것으로 보입니다. 질문에서 언급했듯이 기본적으로 작업 스케줄러는 기본 우선 순위보다 낮은 작업을 실행합니다. StackOverflow에 대한이 질문은 작업을 정상 우선 순위로 실행하도록 수정하는 방법을 설명하지만이 수정으로 인해 여전히 메모리 우선 순위가 약간 다릅니다. 메모리 우선 순위는 Windows Vista의 새로운 기능 이며이 Technet 기사에 설명되어 있습니다. 관리자 나 프로그래머에게 반드시 필요한 도구 인 프로세스 탐색기를 사용하여 메모리 우선 순위를 확인할 수 있습니다 .

어쨌든 예약 된 작업 우선 순위 수정을 사용하더라도 작업의 메모리 우선 순위는 4로 설정되어 일반 설정 5보다 한 단계 낮습니다. 작업의 메모리 우선 순위를 수동으로 5까지 올렸을 때 성능이 향상되었습니다. 프로세스를 대화식으로 실행하는 것과 같습니다.

우선 순위를 높이는 방법에 대한 자세한 내용 은 IO 우선 순위에 대한 관련 StackOverflow 질문 에 대한 답변을 참조하십시오 . 설정 메모리 우선 순위와 NtSetInformationProcess 통해 유사하게 수행 PROCESS_INFORMATION_CLASS하는 집합 ProcessMemoryPriority(이 값은 39 또는 0x27에있다). 다른 사람들이 필요하고 프로그래머 도구에 액세스 할 수없는 경우이를 설정하는 데 사용할 수있는 무료 유틸리티를 만들 수 있습니다.

편집 : 나는 여기서 사용할 수 있는 작업의 메모리 우선 순위를 쿼리하고 설정하기위한 무료 유틸리티를 작성했습니다 . 다운로드에는 소스 코드와 컴파일 된 바이너리가 모두 포함됩니다.


프로세스 탐색기에서 실행 파일 이름을 두 번 클릭하고 "성능"탭을 열어 메모리 우선 순위를 확인할 수 있으며 "실제 메모리"아래에 "메모리 우선 순위"항목이 있습니다.
Moshe

17

문제는 프로세스가 낮은 I / O 우선 순위와 낮은 메모리 우선 순위로 시작한다는 것입니다. 이를 확인하는 가장 쉬운 방법은 sysinternals의 프로세스 탐색기를 사용하는 것입니다. 이 예약 된 작업에서 생성 된 프로세스의 속성을 보면 I / O 우선 순위가 낮고 메모리 우선 순위가 2임을 알 수 있습니다.

이 문제에 대한 해결책은 다음과 같습니다.

  1. 작업 만들기
  2. 작업을 마우스 오른쪽 버튼으로 클릭하고 "내보내기"
  3. 방금 내 보낸 task.xml 파일을 편집하십시오.
  4. 당신은 비슷한 줄을 찾을 수 있습니다 <Priority>7</Priority>
  5. 값을 보통 우선 순위 (4-6 사이)로 변경하십시오. 가능한 값의 테이블 : TaskSettings.Priority 속성
    • 값 4는 대화식 프로세스와 동일한 I / O 및 메모리 우선 순위를 갖습니다. 5와 6의 값은 메모리 우선 순위가 낮습니다.
  6. 작업 스케줄러에서 처음에 만든 작업을 삭제하십시오.
  7. 작업 스케줄러의 작업 영역에서 XML 파일에서 작업을 가져옵니다.

불행히도 GUI에서 예약 된 작업의 초기 우선 순위를 수정할 방법이 없습니다.


제안 해 주셔서 감사합니다. 정기적 인 프로세스 우선 순위와 IO 우선 순위는 분명히 그 일부이며 다른 부분은 메모리 우선 순위입니다. 자세한 내용은 허용되는 답변을 참조하십시오.
Charlie

작업을 XML 파일로 내 보낸 후 문자 인코딩을 유니 코드에서 ANSI로 변경해야 할 수 있습니다. Windows Server 2008 R2에서 내보내기는 유니 코드 파일이며 다시 가져 오려고하면 오류 메시지 The format of the task is not valid. The following error was reported: (1,2)::가 표시됩니다. 파일을 ANSI에 저장하면 해결됩니다.
Erik Anderson

대단히 감사합니다. 이것이 정말 최고의 솔루션입니다. 문서에서 언급했듯이 CPU 우선 순위를 높이려면 우선 순위를 더 높게 (최소 1까지) 설정할 수 있습니다.
룬 Aamodt

레지스트리에서 이것을 조정할 수 있다고 생각하는 사람은 귀찮게하지 말고 멋지게 편집 가능한 방법으로 보이지 않습니다.
Nik

1

사용자 X로 예약 된 작업으로 실행하도록 설정 한 다음 실행하기 전에 사용자 X로 로그인하면 세션이 실행될 때 세션에서 창이 열리고 세션에서 실행됩니다.

이렇게하면 시간이 더 오래 걸리나요? 이것이 무엇을 의미하는지 모르겠지만 유용한 차별화 요소가 될 수 있습니다. 로그인 할 때 사용자 계정이 가지고 있지만 예약 된 작업으로 실행할 때는 시간 초과와 실패가 발생하는 네트워크 액세스가있을 수 있습니까? 새 사용자 계정을 만들고 해당 계정에서 예약 된 작업으로 실행하면 동작이 달라 집니까?

또 다른 아이디어 : 예약 된 작업으로 실행할 때-이제 스크립트의 우선 순위를 수정 했으므로 하위 프로세스가 모두 정상 또는 정상 이하로 실행됩니까?


1
서브 프로세스는 procexp / taskman에 의해 검증 된대로 정상으로 확실히 실행됩니다. 실질적인 네트워크 액세스를 수행하지 않기 때문에 네트워크가 아니라고 생각하지만 다시 확인하겠습니다. 대화 형으로 작업을 실행하는 것에 대한 아이디어도 흥미 롭습니다. 시도해 보겠습니다.
Charlie

프로세스 자체는 이것이 문제가되기 위해 알고있는 네트워크 액세스를 수행 할 필요가 없습니다. Sysinternals에서이 게시물을 읽고 관련이없는 것으로 보이는 것이 어떻게 중단 / 느려짐을 일으킬 수 있는지 확인하십시오. blogs.technet.com/b/markrussinovich/archive/2005/08/28/…
mfinni

1

예약 된 작업이 기본적으로 낮은 우선 순위로 실행될 수 있습니다.

prio더 높은 우선 순위를 강제하는 데 사용하십시오 .


당신은 그들이 우선 순위가 낮다는 것을 맞습니다. 그러나 앞서 언급했듯이, 나는 이미 그것을 설명했습니다. 내가 모르는 프로세스 우선 순위 이외의 다른 우선 순위가 없다면.
Charlie

0

처음에는 보통 우선 순위보다 더 많이 사용할 수 있습니다 (예 : 높음).

초반에는 포 그라운드 세션이 일부 리소스, 주로 하드 디스크 IO 및 메모리를 사용하므로 예약 된 작업이 줄어드는 것보다 이해해야합니다. 명확한 벤치 마크를 위해서는 powershell 스크립트 실행 중에 로그 오프해야합니다

또한 프로세스 속도를 높이기 위해 더 많은 메모리 추가 / 램 드라이브 사용 / 여러 하드 디스크에서 분할 작업 사용 가능


아이디어 주셔서 감사합니다. 머신에는 많은 메모리와 IO 용량이 있으므로 문제는 대화식 작업보다 예약 된 작업으로 작업이 느리게 진행된다는 것입니다. 예약 된 작업이 실행 중일 때는 대개 대화 형 로그온 세션이 없으므로 문제가되지 않습니다.
Charlie

0

이 질문은 얼마 전부터 Windows Server 2008R2에 대한 것입니다. 같은 질문이 있었지만 Windows 10의 경우도 마찬가지입니다. Windows 10 (1703 및 1809에서 확인 됨)에서 가져온 XML을 통해 "우선 순위"를 4로 설정하면 동일한 기본 우선 순위, 동적 우선 순위, I / O 우선 순위를 제공하기에 충분합니다 및 대화식으로 시작된 프로세스로서의 메모리 우선 순위.


0

우선 순위를 설정하기위한 powershell 스 니펫은 다음과 같습니다 (원격 powershell 세션에서 작동합니다).

$taskName = "MyTask" ;`
$currentTask = Get-ScheduledTask -TaskName $taskName ;`
$settings = New-ScheduledTaskSettingsSet ;`
$settings.Priority = 4 ;`
Set-ScheduledTask -TaskName $taskName -Trigger $currentTask.Triggers -Action $currentTask.Actions -Settings $settings -User "NT AUTHORITY\SYSTEM"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.