이 응용 프로그램을 사용하면 Windows 프로세스에서 제약 조건을 설정할 수 있습니다. 이 목적으로 작업 대상을 사용합니다.
목차
릴리스 페이지에서 최신 버전 바이너리를 다운로드하거나 Chocolate 또는 Winget으로 설치할 수 있습니다.
choco install procgov
# or
winget install procgov여기서는 말할 것도 없습니다 :) 명령 프롬프트에서 ProcGov를 시작할 때 새로워 지거나 실행중인 프로세스에 첨부 할 때 활성화 된 기본 모드입니다.
ProcGov를 사용할 때는 때때로 두 번째 인스턴스가 시작되는 것을 관찰 할 수 있습니다 ( -노모니터 스위치를 사용하지 않는 한). 이 두 번째 인스턴스는 작업 모니터이며 명령 줄 Args의 -모니터 스위치로 인식 할 수 있습니다. 모니터링 된 일자리 출구의 마지막 과정이 끝날 때까지 살아남을 것입니다. Windows 세션 당 작업 모니터의 한 인스턴스가 최대 한 인스턴스가 있어야합니다. 그 역할은 Procgov로 생성 된 작업을 모니터링하는 것입니다. 모니터는 모니터링 된 작업에서 마지막 프로세스가 종료 된 직후에 나가야합니다.
이 기능은 베타 단계에 있습니다. 주의해서 사용하여 경험이 풍부한 오류를보고하십시오.
지속적인 응용 프로그램 설정에 -인스턴 스위치를 사용하는 경우 ProcGov는 레지스트리에서 설정을 저장하고 ProcessGovernor라는 Windows 서비스를 생성합니다. 기본적으로 시스템 계정과 %ProgramFiles%ProcessGovernor 폴더를 서비스 기반 경로로 사용합니다. --- 서비스-경로 , -service-username 및 -service-password 명령 줄 스위치를 사용 하여이 설정을 구성 할 수 있습니다. 다른 응용 프로그램의 설치 명령을 실행하면 ProcGov는 레지스트리에 새 데이터를 추가하지만 기존 서비스를 재사용합니다. 서비스는 짧은 시간 후에 업데이트 된 구성을 선택해야합니다.
ProcessGovernor Service는 프로세스 시작 프로세스를 모니터링하고 설치 중에 사전 정의 된 제한을 적용합니다.
서비스를 제거하려면 -uninstall 스위치를 사용하십시오. 마지막 저장된 구성을 제거하면 서비스가 제거됩니다. 서비스와 함께 저장된 모든 ProcGov 데이터를 제거하려면 -uninstall-all 스위치를 사용하십시오.
새로 생성 된 프로세스 또는 이미 실행중인 프로세스에 제한을 설정할 수 있습니다. 러닝 프로세스를 제한 하려면 -p |-피드 스위치를 사용하십시오.
procgov.exe --maxmem 40M --pid 1234 적용된 제한으로 새로운 프로세스를 시작 하려면 프로세스 이미지 경로를 ProcGov 인수로 전달하십시오. procgov64 --maxmem 40M c:temptest.exe . 매개 변수를 대상 프로세스로 전달 해야하는 경우 -- 하는 것이 가장 좋습니다. 예를 들어 ProcGov 매개 변수를 대상 프로세스 매개 변수와 분리하는 것이 가장 좋습니다.
procgov.exe -m 100M -- test.exe -arg1 -arg2=val2 arg3동일한 작업 개체에 여러 프로세스를 할당 할 수 있습니다. 프로세스 ID가 다른 -P 매개 변수를 여러 번 사용하면 ProcGov가 모든 프로세스에 대해 동일한 제한을 적용합니다.
procgov.exe --maxmem 100M -p 1234 -p 1235 -p 1236프로세스 중 하나가 이미 ProcGov 작업 객체에 할당 된 경우 다른 프로세스도 할당됩니다.
한 번 설정된 한도를 업데이트 할 수도 있습니다. 그러나 한 가지 요구 사항이 있습니다. 프로세스는 다른 ProcGov 작업에 할당 할 수 없습니다 (따라서 동일한 작업에 있거나 할당되지 않은 경우). 한계를 업데이트하려면 새로운 한도와 대상 프로세스 ID를 제공하는 Procgov를 실행하십시오. Procgov는 지정된 한계 만 업데이트합니다. 이 행동을 더 잘 이해할 수있는 예를 살펴 보겠습니다.
We set a CPU limit on a process 1234
procgov.exe --nowait -c 2 -p 1234
Then we run procgov again with the new CPU limit - procgov will update the existing job object
procgov.exe --nowait -c 4 -p 1234--maxmem ( -m ) 스위치 프로세스를 사용하면 거버너가 프로세스에서 커밋 된 메모리에 제한을 설정할 수 있습니다. Windows Commited Memory는 실제로 프로세스가 사용하는 모든 개인 메모리입니다. 이렇게하면 프로세스 주지사를 사용하여 메모리 누출에 대한 .NET 응용 프로그램 (웹 응용 프로그램 포함)을 테스트 할 수 있습니다. 프로세스가 메모리를 누출되면 더 빨리 OffemoryException 을 얻습니다.
procgov.exe -m 100M -c 2 notepad.exe
procgov.exe -m 120M -p 1234--maxws 및 -minws 스위치를 사용하면 프로세스의 최대 및 최소 작업 세트 크기 (물리적 메모리 사용)를 제어 할 수 있습니다. 이 옵션은 seinCreaseBasePriorityPrivilege가 필요하므로 계정에이를 가지고 있는지 확인하십시오 (문제 69의 추가 정보). 작업 세트 크기를 제한하려면 예를 들어이 두 매개 변수에 대해 항상 0보다 큰 값을 제공해야합니다.
procgov.exe --minws 1M --maxws 120M -p 1234-maxjobmem 옵션을 사용하면 주어진 작업 개체에 속하는 모든 프로세스에 대해 최대 커밋 된 메모리를 지정할 수 있습니다. 예를 들어 아동 프로세스에 대한 작업 전파를 활성화하거나 동일한 작업 개체를 사용하여 여러 프로세스를 제어 할 때 유용 할 수 있습니다.
procgov.exe -r --maxjobmem 200M -- cmd.exe
procgov.exe -r --maxjobmem 1G -p 1234,1235,1236-CPU 스위치를 사용하면 응용 프로그램이 실행되는 코어를 제어 할 수 있습니다. CPU 코어 번호를 소수점 값 으로 제공하는 경우 응용 프로그램이 지정된 코어를 사용할 수 있습니다.
CPU 코어 번호를 16 진수 값 (0x 접두사 포함) 으로 제공하면이 숫자는 첫 번째 프로세서 그룹에서 친화력 마스크로 취급됩니다. 여기서 각 비트는 CPU 코어를 나타냅니다 (가장 유의미한 비트부터 시작). 또한, 문자 'g'로 접두사를 가진 프로세서 그룹 번호와 문자 'n'으로 접두사가 붙은 Numa 노드 번호로 친 화성 마스크를 선불로 만들 수 있습니다. 또한 친화력을 건너 뛰고 NUMA 노드 또는 프로세서 그룹 선호도를 사용할 수도 있습니다. 유효한 예제 값 : n1:g0:0xF , n1:g0 , n1 , g0 .
-CPU 매개 변수는 여러 번 정의 될 수 있고 최종 친화력 마스크는 제공된 마스크의 조합이 될 것이다.
CPU 집약적 인 응용 프로그램에서 두 가지 예제 사용법을 살펴 보겠습니다. 첫 번째에서는 CPU 코어 한계를 두 코어로 설정했습니다.
procgov.exe --cpu=2 TestLimit.exe내 컴퓨터의 CPU 사용 그래프는 다음과 같이 보입니다.
잠시 후 우리는 CPU 친화력 마스크를 설정합니다 (HEX 표기법 포함) :
procgov.exe --cpu=0x2 TestLimit.exe이 경우 CPU 그래프는 다음과 같이 보입니다 (두 번째 코어 만 사용됩니다).
보다 복잡한 친화력 설정의 예 :
# Use processor group 0 affinity from NUMA node 0 and 1 core from the group 1 in NUMA node 1
procgov.exe --cpu=n0:g0 --cpu=n1:g1:0x1 TestLimit.exe
# Use processor group 0 affinity and 1 core from the group 1
procgov.exe --cpu=g0 --cpu=g1:0x1 TestLimit.exe시스템에 어떤 CPU 구성이 있는지 확실하지 않은 경우 매개 변수가없는 Procgov를 실행할 수 있으며 인쇄 할 수 있습니다.
procgov.exe
#
# Use --help to print the available options.
#
# === SYSTEM INFORMATION ===
#
# NUMA Node 0:
# Processor Group 0: 000000000000000F (CPUs: 0,1,2,3)
# Processor Group 1: 0000000000000007 (CPUs: 4,5,6)
#
# NUMA Node 1:
# Processor Group 2: 000000000000000F (CPUs: 7,8,9,10)
# Processor Group 3: 0000000000000007 (CPUs: 11,12,13)
#
# Total Physical Memory (MB): 20 460
# Available Physical Memory (MB): 16 086
# Total Committed Memory (MB): 3 701
# Current Committed Memory Limit (MB): 21 740-CPU- 레이트 옵션을 사용하면 프로세스의 최대 CPU 속도를 설정할 수 있습니다. CPU 친화력을 설정하면 비율이 선택된 코어에만 적용됩니다. 예를 들어, 컴퓨터에 8 개의 논리적 CPU 코어가 있고 CPU 속도를 100%로 설정하고 CPU 선호도를 0x7 (첫 4 개의 코어)으로 설정하면 모니터링 도구에 의해이 프로세스에 대해보고 된 최대 CPU 속도는 50%입니다 (우리는 전체 용량이지만 CPU 번호의 절반에 실행됩니다).
-타임 아웃 옵션을 사용하면 ProcGov가 종료하기 전에 프로세스가 실행될 수있는 최대 시간 (클럭 시간)을 정의 할 수 있습니다. -수용 옵션이 설정되고 타임 아웃이 통과되면 Progov는 모니터링 세션 시작부터 어린이가 시작한 모든 프로세스를 종료합니다.
-process-utime 및 -job-utime 옵션을 사용하면 프로세스의 최대 사용자 모드 실행 시간 ( -Recursive 옵션도 모든 어린이도 포함) 또는 작업에 제한을 설정할 수 있습니다. 후자의 경우는 프로세스 및 어린이의 총 사용자 모드 실행 시간에 제한을 설정하므로 -재수 옵션으로 이해됩니다.
-Priority 매개 변수는 모니터링 된 프로세스의 프로세스 우선 순위 클래스를 설정합니다. 가능한 값으로는 다음이 포함됩니다 : Idle , BelowNormal , Normal , AboveNormal , High , RealTime . 가장 높은 우선 순위는 SeinCreaseBasePriorityPrivilege가 필요하므로 계정에이를 가지고 있는지 확인하십시오 (문제 69의 추가 정보).
-env 스위치를 사용하면 프로세스 환경 변수를 설정할 수 있습니다. 이 스위치는 변수 값이있는 텍스트 파일의 경로를 수용합니다.
COR_ENABLE_PROFILING=0x01
COR_PROFILER={32E2F4DA-1BEA-47ea-88F9-C5DAF691C94A}ProcGov 명령은 다음과 같이 보일 수 있습니다.
procgov.exe --env c: t emp e nv.txt -c 2 dotnet_app.exe새 프로세스를 시작하거나 기존 프로세스에 액세스 할 때 환경 변수를 설정할 수 있습니다.
-enable-privilege 스위치를 사용하여 대상 프로세스에서 권한을 활성화 할 수 있습니다. 예를 들어이 매개 변수를 여러 번 사용하여 여러 권한을 지정할 수 있습니다.
procgov.exe --enable-privilege=SeDebugPrivilege --enable-privilege=SeShutdownPrivilege notepadWindows에서는 프로세스 토큰에 새로운 권한을 추가 할 수 없습니다. 기존의 것만 활성화 할 수 있습니다. 프로세스 해커 또는 프로세스 탐색기에서 사용 가능한 프로세스 권한을 확인할 수 있습니다. 주어진 사용자가 이용할 수 있도록하는 방법을 배우려면 주어진 권한에 대한 문서를 확인하십시오 (예 : 그룹 정책을 업데이트해야 함).
아래 에서이 프로젝트에 기여한 사람들의 목록을 찾을 수 있습니다. 감사합니다!