개별 Windows 서비스의 메모리 사용량을 찾는 방법은 무엇입니까?


42

작업 관리자는 svchost.exe의 전체 메모리 사용량을 보여줍니다. 개별 서비스의 메모리 사용량을 볼 수있는 방법이 있습니까?


이는 svchost.exe의 Finegrained 성능보고 와 유사합니다.


1
같은 문제가있는 사람 (나 같은 사람) :-Windows 작업 관리자-> 성능 (탭)-> 리소스 모니터 (버튼)-서비스별로 svchost.exe가 분할됩니다. Windows 7
Oliver

1
@Oliver Resource Monitor는 서비스 당 CPU를 보여 주지만이 질문은 메모리에 관한 것입니다.
Aidan Ryan

이 SO 답변 에서 개별 서비스의 메모리를 확인하는 스크립트를 볼 수 있습니다 .
Rosberg Linhares

@RosbergLinhares이 스크립트는 PeterMortensen와 동일합니다
Aidan Ryan

@AidanRyan, PeterMortensen의 스크립트는 Schedule 및 gpsvc 서비스에서 작동하지 않았습니다.
Rosberg Linhares 1

답변:


51

원하는 정보를 쉽게 얻을 수있는 방법이 있지만 시스템을 약간 변경해야합니다.

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

12
PowerShell 사용자의 경우 : Get-Service | ForEach-Object {C : \ Windows \ System32 \ SC.EXE 구성 $ _. Name type = own}
Tamara Wijsman

1
사실, 나는 일반적으로 svchost.exeWindows XP 시스템에서 3-4 개의 인스턴스를 발견 합니다. 이것에 나는 6을 본다.
SamB

4
@TomWij : 이 스 니펫을 사용할 때 매우 주의 하십시오. EFS (파일 시스템 암호화)를 사용하고이를 설정 한 경우 type= own올바르게 작동하지 않을 수 있으며 암호화 된 파일에 액세스하지 않고 남아있을 수 있습니다. OS 파일이 암호화되어 있으면 치명적입니다!)
Beau

@Beau : 왜 명시 적으로 알고 있습니까?
타마라 Wijsman

2
@Peter Mortensen : 서비스 공개 도구를 만들었습니다 . svchost.exe 프로세스를 공유하는 서비스를 저장합니다. 2. 별도의 프로세스에서 실행되도록 서비스를 구성합니다. 3. 1 단계 서비스에 저장된 모든 서비스를 한 프로세스로 되돌립니다. 귀하의 의견과 제안을 환영합니다. 아이디어 주셔서 감사합니다.
Dmytro Ovdiienko

18

내장 tasklist명령을 사용하고 서비스 이름 ( /fi스위치) 별로 필터링 할 수 있습니다. 예를 들면 다음과 같습니다.

 tasklist /fi "services eq TermService"

산출:

이미지 이름 PID 세션 이름 세션 # Mem 사용법
========================= ======== ================== = ========== ============
svchost.exe 2940 콘솔 0 7.096 K

이름을 모르는 경우 다음 명령문을 실행하여 이름을 나열 할 수 있습니다.

 tasklist /svc /fi "imagename eq svchost.exe"

svchost.exe에서 호스팅하는 모든 서비스를 나열합니다 (예 :

이미지 이름 PID 서비스
========================= ======== ==================== ============================
svchost.exe 632 DcomLaunch
svchost.exe 684 RpcSs
svchost.exe 748 DHCP, Dnscache
svchost.exe 788 LmHosts, W32Time
svchost.exe 804 AeLookupSvc, AudioSrv, 브라우저, CryptSvc,
                                   dmserver, EventSystem, helpsvc,
                                   lanmanserver, lanmanworkstation, 메신저,
                                   Netman, Nla, RasMan, 일정, seclogon,
                                   SENS, ShellHWDetection, TrkWks, winmgmt,
                                   wuauserv, WZCSVC
svchost.exe 1140 ERSvc
svchost.exe 1712 원격 레지스트리
svchost.exe 196 W3SVC
svchost.exe 2940 TermService
svchost.exe 2420 TapiSrv

서비스가 반드시 호스팅하지 않아도됩니다 svchost.exe. 따라서 실행 파일 이름으로 서비스 필터링을 찾을 수 없으면 그냥 실행하십시오 tasklist /svc. 모든 서비스가 표시됩니다.


6
이것은 질문에서 요청한 것처럼 개별 서비스가 사용하는 메모리를 보여주지 않는 것 같습니다.
Duncan Jones

9

프로세스 탐색기는 실제로 svchost 내의 개별 메모리 사용량을 보여줍니다. http://technet.microsoft.com/en-us/sysinternals/bb896653 의 최신 버전이 있는지 확인하십시오.

프로세스 탐색기를 관리자로 실행하고 검사하려는 svchost를 클릭 한 후 View DLLs버튼 (또는 CTRL+D)을 클릭하십시오 . 오른쪽 DLL의 창에서 헤더를 클릭 Select Columns...한 다음 확인 WS Total Bytes및 히트 OK.

이제 svchost 내에서 개별 서비스 (dll로 구현)의 메모리 사용량을보고 정렬 할 수 있습니다.


4
힙 크기는 표시하지 않습니다.
Der_Meister

7

Process Monitor는 범용 유틸리티 (접근을 제외하고는 모든 것을 수행함)이지만이 특정 질문에 대해서는 VMMap (다른 SysInternals 유틸리티)을 사용하려고합니다.

http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx

VMMap은 프로세스 가상 및 실제 메모리 분석 유틸리티입니다. 프로세스의 커밋 된 가상 메모리 유형과 운영 체제가 해당 유형에 할당 한 물리적 메모리 (작업 세트)의 양을 보여줍니다. VMMap은 메모리 사용량을 그래픽으로 표시하는 것 외에도 요약 정보와 자세한 프로세스 메모리 맵을 보여줍니다. 강력한 필터링 및 새로 고침 기능을 사용하면 프로세스 메모리 사용 소스 및 애플리케이션 기능의 메모리 비용을 식별 할 수 있습니다.

VMMap은 라이브 프로세스를 분석하기위한 유연한보기 외에도 모든 정보를 보존하여 다시로드 할 수있는 기본 형식을 포함하여 여러 형식으로 데이터 내보내기를 지원합니다. 또한 스크립트 시나리오를 가능하게하는 명령 줄 옵션도 포함되어 있습니다.


5
시원한! 이제 힙 메모리 블록의 사용을이를 소유 한 개별 서비스로 추적하는 방법이 있습니까?
Aidan Ryan

3

이것은 스택 오버 플로우 영역으로 들어가고 있지만 스레드 당 메모리 통계를 얻을 수 있다면 스레드 스택에 나열된 dll과 일치시켜 개별 서비스 dll과 대략적으로 상관시킬 수 있습니다. 그래도 내 작은 시스템 관리자의 뇌에는 너무 비싸다.


2

Peter Mortensen의 답변을 여기서 확장합니다. 서비스 유형을 수정하기 전에 다음과 같은 명령으로 기존 유형을 확인하십시오.

sc query wuauserv

다음을 출력합니다 :

    TYPE               : 20  WIN32_SHARE_PROCESS
    STATE              : 1  STOPPED
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0

"10 WIN32_OWN_PROCESS", "20 WIN32_SHARE_PROCESS"이외의 유형은 수정하지 않아야합니다.


1

서비스를 분리하는 것이 정답이지만 sc config 명령이 작동하지 않았습니다 (2008 R2).

레지스트리를 통해이를 수행 할 수 있습니다. "Type"매개 변수를 0x00000010 (12 월 16 일)으로 설정해야합니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<ServiceName>\Type

어떤 서비스를 수정하기로 선택했는지주의하십시오. "소유"및 "공유"외에 다음과 같이 변경해서는 안되는 특수 유형이 있습니다.

  • 핵심
  • 파일 시스템
  • rec
  • 개조 하다

그런 다음 서비스를 다시 시작하면 ProcessExplorer에 이제 자체 svchost.exe 프로세스가 있음을 알 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.