사양이 낮은AWS WorkSpaces에서 CPU사용률이 높은 프로세스의 우선순위를 낮추는 방안

3분 분량
콘텐츠 수준: 중급
0

높은 CPU사용률을 사용하는 프로그램으로 인하여 워크스페이스의 연결이 끊기는 경우 아래의 방법을 고려해 볼 수 있습니다.

데이터를 수집하거나 리포트를 생성하는 특정 프로그램의 경우 높은 CPU사용률이 필요하여 EC2인스턴스나 WorkSpaces에서 사용시 연결끊김이나 예기치 않은 문제가 발생할수 있습니다. 따라서 이러한 프로세스의 CPU 선호도나 우선순위를 낮춰서 WorkSpaces의 연결끊김을 방지할수 있는 방안을 소개합니다. 물론 이방법이외에도 CPU선호도를 조정하여 특정 CPU 코어에서만 동작하게도 설정이 가능합니다.

  1. 레지스트리를 생성하여 영구적으로 해당 프로세스의 우선순위를 낮추는 방안 입니다.
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe\PerfOptions]
"CpuPriorityClass"=dword:00000001

위에서 notepad.exe 대신에 우선순위를 낮추려고 하는 프로세스의 명으로 변경한뒤 .reg파일로 바탕화면에 저장합니다. 그리고 레지스트리 값을 등록 한 후 아래와 같이 등록되었는지 확인합니다 .

여기에 이미지 설명 입력

그리고 Notepad를 실행하면 아래와 같이 우선순위가 낮음으로 설정되어 있음을 확인하실 수 있습니다.

여기에 이미지 설명 입력

레지스트리 등록시 아래의 값을 참고하시기 바랍니다.

PRIORITY:
High: 00000003 
Above Normal: 00000006 
Normal: 00000002 
Below Normal: 00000005 
Low: 00000001

2. 우선순위를 낮추는 스크립트를 활용하여 해당 프로세스를 실행하는 방안입니다.

노트패드를 실행 후 아래 내용으로 .BAT파일로 바탕화면에 저장한 후 실행 시 낮은 우선순위로 프로그램을 시작할 수 있습니다.

C:\Windows\System32\cmd.exe /c start "" /Low "C:\Windows\System32\notepad.exe"

그리고 파워쉘과 CMD명령어를 통해 실행 중인 프로그램의 우선순위를 조절할 수 있습니다.

[Powershell.exe]


Get-WmiObject Win32_process -filter 'name = "notepad.exe"' | foreach-object { $_.SetPriority(64) }

[Cmd.exe]

wmic process where name="notepad.exe" CALL setpriority 32768
   Priority Level ID	  Priority Level Name
   256                    Realtime
   128                 	  High
   32768	          Above normal
   32	                  Normal
   16384	          Below normal
   64	                  Low
  1. 스크립트를 작업 스케줄러에 등록하여 주기적으로 해당 프로세스의 우선순위를 낮추는 방안 입니다.

특정 시점에서만 가동하고 종료되거나 다른 프로그램에 의해 불러오는 프로그램의 경우 아래와 같이 설정 시 우선 순위를 낮출수 있습니다.

3.1 먼저 아래와 같이 스크립트를 작성합니다. 파이어폭스 브라우저의 경우 1. 에서 소개된 레지스트리 값을 설정하더라도 주요 프로세스는 Normal로 작동합니다. 하지만 아래와 같이 30초 마다 우선순위를 변경하는 스크립트를 등록하면 정해진 시간에서는 낮은 우선순위로 동작하게 할수 있습니다.

while ($true) {
    Get-WmiObject Win32_process -filter 'name = "firefox.exe"' | foreach-object {
        $_.SetPriority(64)
    }
    Start-Sleep -Seconds 30
}

3.2 위의 스크립트를 SetFirefoxPriority.ps1 로 저장한 뒤 C:\Scripts\ 에 저장합니다. 그후 아래와 같이 작업스케줄러에 등록합니다.

3.3 General 탭에서 Change User or Group 를 눌러 SYSTEM 계정으로 변경, Run with highest privileges

여기에 이미지 설명 입력

3.4 Triggers 탭에서 On a schedule , Start 시간을 06:00:00 AM ,Rescur everyday 1 days 입력 Advanced settings에서 Repea task every 30 minutes for a duration of 1hour 그리고 Stop all running tasks 에도 표시 후 Enable 후 OK 를 누릅니다. 똑같은 트리거를 오후 6시로 한개 더 생성합니다.

여기에 이미지 설명 입력

3.5 Actions 탭에서 New를 누른다음 Actions에 Start program을 선택 그리고 Program/script에 powershell.exe 그리고 Add arguments에 C:\Scripts\SetFirefoxPriority.ps1 로 선택합니다.

여기에 이미지 설명 입력

이렇게 설정하면 특정시간에 해당 스크립트가 동작하여 특정 프로세스의 우선순위를 변경할 수 있습니다.

profile pictureAWS
지원 엔지니어
게시됨 3달 전410회 조회
댓글 없음

관련 콘텐츠