svchost.exe의 세분화 된 성능보고


20

이것은 항상 나를 귀찮게하는 것이므로 서버 결함 커뮤니티에 요청할 것입니다.

작업 관리자 에서 얻는 고급 작업 이상의 것을 추적하는 프로세스 탐색기 가 마음에 듭니다 . 그러나 svchost 에서 단일 프로세스로 호스팅되는 수십 개의 서비스 중 어느 것이 내 프로세서 스파이크를 만들고 있는지 지속적으로 알고 싶습니다 .

이 정보를 알아내는 데 방해가되지 않는 방법이 있습니까?

답변:


34

예, (거의) 비 침입적이고 쉬운 방법이 있습니다.

각 서비스를 자체 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.

4
와우, 멋진 솔루션 +1
Matt Simmons

2
PowerShell 스크립트를 추천 한 포스터에 : 나는 그것을 시도하고 성공적으로 모든 서비스를 변경했습니다. 그러나 다시 부팅하면 오류 상자가 나타나고 다시 시작되었습니다. '마지막으로 좋은 구성'으로 복원해야했습니다. 조심해.
user42670


1
@ChrisS : 이후 버전의 Windows에서는 변조되지 않도록 보호됩니다. 나는 그것이 Windows XP에서 중요하다고 생각합니다 ...
Tamara Wijsman

2
@ChrisS keep-shared 목록에 대한 링크 감사합니다! 그 사이트는 이제 죽었다. 당 아카이브 목록이었다 : HTTPFilter, KDC, Netlogon, NTLMssp, PolicyAgent, ProtectedStorage, SamSs, Eventlog, PlugPlay(모든과 관련된 lsass.exe)
CXW

2

직접 수행하는 쉬운 방법을 모르지만 svchost 프로세스의 프로세스 탐색기 특성 페이지에서이를 유추 할 수 있습니다. 프로세스 속성의 서비스 탭에는 해당 프로세스에서 호스팅되는 서비스가 표시됩니다. Threads (스레드) 탭에는 스레드 및 스레드 스택과 CPU 사용량이 표시됩니다. 스레드의 시작 주소는 종종 해당 스레드에서 실행중인 진입 점 DLL 및 확장 서비스를 표시합니다. 다른 경우에는 스레드 호출 스택을 볼 수 있으며 실행중인 코드 조각을 알려주는 모듈 이름을 호출 스택에 표시합니다.


1

서비스 공개 도구를 사용해보십시오 . 그것:

  1. svchost.exe 프로세스를 공유하는 서비스를 저장합니다.
  2. 별도의 프로세스에서 실행되도록 서비스를 구성합니다. 재부팅 후에는 각 서비스가 별도의 프로세스로 표시됩니다.
  3. 1 단계 서비스에 저장된 모든 서비스를 한 프로세스로 되돌립니다.

귀하의 의견과 제안을 환영합니다.

@ Peter Mortensen : 아이디어 주셔서 감사합니다.


1
Dmytro, 서비스 공개 도구 사용 방법을 어디서 배울 수 있습니까? Windows 7에서 service_disclosure.exe를 다운로드하여 실행했습니다. 간단히 검은 색 명령 창이 열리고 닫히는 것을 보았지만 더 이상 발생하지 않는 것 같습니다. 이것은 당황했다! 컴퓨터에서 수행 한 작업과 도구를 올바르게 사용하는 방법을 알고 싶습니다.
개발자

안녕 댄 이 단계별 가이드 (고려하시기 바랍니다 sourceforge.net/p/svcdisclsr/wiki/Home )
드미트로 Ovdiienko

1

주의 : 적용하기 전에 필요한 조사, 복원 지점 및 백업 절차를 수행 한 후 모든 것이 여전히 작동하는지 확인하십시오. 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에서 다른 ... .


0

이것이 여전히 답변이 필요한 질문인지는 모르지만 고객의 svchost 오류 문제를 해결하는 동안 정확히 다음에 대한 명령 줄이 있음을 알게되었습니다. "tasklist / svc"실행중인 전체 프로세스 목록을 제공합니다. 프로세스 ID 및 각 프로세스가 실행중인 서비스를 사용합니다. 프로세서 사용량을 제공하지는 않지만 프로세스 ID별로 한 번에 하나의 프로세스를 닫고 CPU를 막고있는 서비스 그룹을 파악할 수 있습니다.


0

요즘에는 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.ps1Enable-Privilege.ps1파일을 같은 폴더에 넣으면 다음 과 같이 스크립트를 실행할 수 있습니다.

.\Set-ServiceTypeToOwnProcess.ps1 -ServiceName 'Appinfo', 'gpsvc', 'Schedule', 'SENS', 'SessionEnv', 'wuauserv'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.