답변:
예, (거의) 비 침입적이고 쉬운 방법이 있습니다.
각 서비스를 자체 SVCHOST.EXE 프로세스에서 실행하도록 분할하면 CPU주기를 소비하는 서비스는 프로세스 탐색기에서 쉽게 볼 수 있습니다 ( "="뒤에 공백).
SC Config Servicename Type= own
이를 명령 행 창에서 수행하거나 BAT 스크립트에 넣으십시오. 관리 권한이 필요하며 컴퓨터를 다시 시작해야 적용 할 수 있습니다.
원래 상태는 다음을 통해 복원 할 수 있습니다.
SC Config Servicename Type= share
예 : Windows Management Instrumentation을 별도의 SVCHOST.EXE에서 실행하려면 :
SC Config winmgmt Type= own
이 기술은 메모리 소비를 약간 늘리는 것 외에는 아무런 영향을 미치지 않습니다. 또한 각 서비스의 CPU 사용량을 관찰하는 것 외에도 각 서비스의 페이지 결함 델타, 디스크 I / O 읽기 속도 및 디스크 I / O 쓰기 속도를 쉽게 관찰 할 수 있습니다. 프로세스 탐색기의 경우 열보기 / 선택 메뉴 : 탭 프로세스 메모리 / 페이지 결함 델타, 프로세스 성능 / IO 델타 쓰기 바이트 탭, 각각 프로세스 성능 / IO 델타 읽기 바이트 탭.
대부분의 시스템에는 서비스가 많은 SVCHOST.EXE 프로세스가 하나만 있습니다. 이 순서를 사용했습니다 (명령 행 창에 직접 붙여 넣기 가능).
rem 1. "Automatic Updates"
SC Config wuauserv Type= own
rem 2. "COM+ Event System"
SC Config EventSystem Type= own
rem 3. "Computer Browser"
SC Config Browser Type= own
rem 4. "Cryptographic Services"
SC Config CryptSvc Type= own
rem 5. "Distributed Link Tracking"
SC Config TrkWks Type= own
rem 6. "Help and Support"
SC Config helpsvc Type= own
rem 7. "Logical Disk Manager"
SC Config dmserver Type= own
rem 8. "Network Connections"
SC Config Netman Type= own
rem 9. "Network Location Awareness"
SC Config NLA Type= own
rem 10. "Remote Access Connection Manager"
SC Config RasMan Type= own
rem 11. "Secondary Logon"
SC Config seclogon Type= own
rem 12. "Server"
SC Config lanmanserver Type= own
rem 13. "Shell Hardware Detection"
SC Config ShellHWDetection Type= own
rem 14. "System Event Notification"
SC Config SENS Type= own
rem 15. "System Restore Service"
SC Config srservice Type= own
rem 16. "Task Scheduler"
SC Config Schedule Type= own
rem 17. "Telephony"
SC Config TapiSrv Type= own
rem 18. "Terminal Services"
SC Config TermService Type= own
rem 19. "Themes"
SC Config Themes Type= own
rem 20. "Windows Audio"
SC Config AudioSrv Type= own
rem 21. "Windows Firewall/Internet Connection Sharing (ICS)"
SC Config SharedAccess Type= own
rem 22. "Windows Management Instrumentation"
SC Config winmgmt Type= own
rem 23. "Wireless Configuration"
SC Config WZCSVC Type= own
rem 24. "Workstation"
SC Config lanmanworkstation Type= own
rem End.
서비스 공개 도구를 사용해보십시오 . 그것:
귀하의 의견과 제안을 환영합니다.
@ Peter Mortensen : 아이디어 주셔서 감사합니다.
주의 : 적용하기 전에 필요한 조사, 복원 지점 및 백업 절차를 수행 한 후 모든 것이 여전히 작동하는지 확인하십시오. RAID 및 비 RAID 시스템 모두의 안전 모드뿐만 아니라 비 RAID 시스템에서만 복구 환경을 통해이를 복구 할 수 있습니다. 이것은 서버가 아닌 개발자 시스템에서 테스트되었습니다.
Powershell에서는 다음 명령을 사용하여 모든 비 lass 서비스에 대해이 작업을 수행 할 수 있습니다.
Get-Service | ForEach-Object `
{ SC.EXE config $_.Name type= own }
ForEach ($svc in @("efs", "keyiso", "netlogon", "policyagent", "samss", "vaultsvc", `
"was", "w3svc")) `
{ SC.EXE config $svc type= share }
여기서 제외 된 목록 은 그룹 정책 에이전트가 부팅 중에 올바르게 통신하는 데 필요한 policyagent를 제외하고 공유 lsass.exe에서 모두 실행해야합니다 .
또한 최근에 발견 했다 (프로세스 활성화) 및 W3SVC 그들이 제외에 추가 된, 그래서 자신의 프로세스를 공유하는 IIS (월드 와이드 웹) 필요.
이것은 윈도우 10 (1607, 빌드 14393.953)에서 테스트되었습니다의 제외는 XP에서 다른 ... .
요즘에는 PowerShell을 사용하여 서비스 유형을 "자체 프로세스"로 변경하고 각 유형에 대한 메모리를 개별적으로 볼 수 있습니다. 이 요지 는 완전한 코드를 보여줍니다. 중심 아이디어는 서비스 유형을 가장 덜 방해하는 방식에서 가장 방해가되는 방식으로 변경하려고합니다.
$win32Service = Get-CimInstance -ClassName Win32_Service -Filter "Name = '$ServiceName'" -Verbose:$false
if ($win32Service)
{
if (!(Set-ServiceTypeToOwnProcessByCim $win32Service))
{
if (!(Set-ServiceTypeToOwnProcessByWindowsRegistry $win32Service))
{
if (Grant-FullControlRightsOnServiceRegistryKeyToCurrentUser $win32Service)
{
Set-ServiceTypeToOwnProcessByWindowsRegistry $win32Service | Out-Null
}
}
}
}
else
{
Write-Warning "[$ServiceName] Service not found"
}
Set-ServiceTypeToOwnProcess.ps1
및 Enable-Privilege.ps1
파일을 같은 폴더에 넣으면 다음 과 같이 스크립트를 실행할 수 있습니다.
.\Set-ServiceTypeToOwnProcess.ps1 -ServiceName 'Appinfo', 'gpsvc', 'Schedule', 'SENS', 'SessionEnv', 'wuauserv'