Windows 10 서비스 호스트 그룹화
서비스 호스트(svchost.exe)는 DLL 파일에서 서비스를 로드하기 위한 셸 역할을 하는 공유 서비스 프로세스입니다. 서비스는 관련 호스트 그룹으로 구성되며 각 그룹은 서비스 호스트 프로세스의 다른 instance 내에서 실행됩니다. 이러한 방식으로 한 instance 문제는 다른 인스턴스에 영향을 주지 않습니다. 서비스 호스트 그룹은 일치하는 보안 요구 사항과 서비스를 결합하여 결정됩니다. 예시:
- 로컬 서비스
- 로컬 서비스 네트워크 없음
- 로컬 서비스 네트워크 제한
- 로컬 시스템
- 로컬 시스템 네트워크 제한
- 네트워크 서비스
SvcHost 서비스 분리
Windows 10 크리에이터스 업데이트(버전 1703)부터 이전에 그룹화되었던 서비스가 대신 구분됩니다. 각 서비스는 자체 SvcHost 프로세스에서 실행됩니다. 이 변경 내용은 클라이언트 데스크톱 SKU를 실행하는 RAM이 3.5GB 이상 인 시스템에 대해 자동으로 적용됩니다. RAM이 3.5GB 이하인 시스템에서는 계속해서 서비스를 공유 SvcHost 프로세스로 그룹화합니다.
이 디자인 변경의 이점은 다음과 같습니다.
- 호스트의 다른 비 네트워크 서비스의 오류로부터 중요한 네트워크 서비스를 격리하고 네트워킹 구성 요소가 충돌할 때 네트워킹 연결을 원활하게 복원하는 기능을 추가하여 안정성을 향상했습니다.
- 공유 호스트에서 오작동 서비스를 격리하는 것과 관련된 문제 해결 오버헤드를 제거하여 지원 비용을 줄입니다.
- 더 많은 서비스 간 격리를 제공하여 보안 강화
- 서비스별 설정 및 권한을 허용하여 확장성 향상
- 서비스별 CPU, I/O 및 메모리 관리를 통해 리소스 관리를 개선하고 명확한 진단 데이터(서비스당 CPU, I/O 및 네트워크 사용량 보고)를 증가시켰습니다.
이 작업을 시도합니다.
리팩터링 동작을 보려면 Windows 10 버전 1703 VM을 만들고 다음과 같이 메모리 설정을 구성합니다.
- 그룹화된 프로세스를 보려면 RAM을 3484MB 이하로 설정합니다. VM을 다시 시작한 다음 작업 관리자를 엽니다.
- 분리된 프로세스를 보려면 RAM을 3486MB 이상으로 설정합니다. VM을 다시 시작한 다음 작업 관리자를 엽니다.
리팩터링을 사용하면 작업 관리자에서 실행 중인 프로세스를 더 쉽게 볼 수 있습니다. 여러 개별 호스트 그룹을 확장하지 않고도 작업 관리자를 살펴보고 어떤 서비스가 어떤 리소스를 사용하고 있는지 정확히 알 수 있습니다.
예를 들어 Windows 10 버전 1607의 작업 관리자에 표시되는 실행 중인 프로세스는 다음과 같습니다.
Windows 10 버전 1703에서 실행 중인 프로세스의 동일한 보기와 비교합니다.
예외
일부 서비스는 3.5GB 이상의 RAM으로 실행되는 PC에서 계속 그룹화됩니다. 예를 들어 BFE(기본 필터링 엔진) 및 Windows 방화벽(Mpssvc)은 RPC 엔드포인트 매퍼 및 원격 프로시저 호출 서비스와 마찬가지로 단일 호스트 그룹에서 함께 그룹화됩니다.
그룹화될 서비스를 식별해야 하는 경우 작업 관리자에서 보고 명령줄 도구를 사용하는 것 외에도 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 해당 서비스 키에서 SvcHostSplitDisable 값을 찾을 수 있습니다.
기본값 1 은 서비스가 분할되지 않도록 합니다.
예를 들어 BFE에 대한 레지스트리 키 구성은
메모리 공간
서비스를 분리하면 SvcHost 인스턴스의 총 수가 증가하여 메모리 사용률이 증가합니다. (서비스 그룹화는 관련된 서비스의 전체 리소스 공간을 약간 줄여 줍니다.)
다음 예제를 고려합니다.
그룹화된 서비스(< 3.5GB) | 분할 서비스(3.5GB 이상) |
---|---|
![]() |
![]() |
참고
위의 는 관찰된 최대값을 나타냅니다.
총 서비스 인스턴스 수와 결과 메모리 사용률은 활동에 따라 달라집니다. 인스턴스 수는 일반적으로 그룹화된 서비스의 경우 약 17-21, 분리된 서비스의 경우 67-74까지 다양할 수 있습니다.
이 작업을 시도합니다.
Windows 10 버전 1703 PC에서 호스트된 서비스를 분할하는 경우의 영향을 확인하려면 메모리 설정을 토글하기 전과 후에 다음 Windows PowerShell cmdlet을 실행합니다.
Get-Process SvcHost | Group-Object -Property ProcessName | Format-Table Name, Count, @{n='Mem (KB)';e={'{0:N0}' -f (($_.Group|Measure-Object WorkingSet -Sum).Sum / 1KB)};a='right'} -AutoSize