¿Cómo encontrar el uso de memoria de servicios individuales de Windows?


42

El Administrador de tareas muestra el uso de memoria general de svchost.exe. ¿Hay alguna manera de ver el uso de memoria de servicios individuales?


Tenga en cuenta que esto es similar a los informes de rendimiento Finegrained en svchost.exe


1
Para cualquier persona (como yo) que tenga el mismo problema: - Administrador de tareas de Windows -> Rendimiento (pestaña) -> Monitor de recursos (botón) - Y obtiene svchost.exe dividido por servicio En Windows 7
Oliver

1
@Oliver Resource Monitor muestra CPU por servicio, pero esta pregunta es acerca de la memoria.
Aidan Ryan

Puede ver un script para verificar la memoria de servicios individuales en esta respuesta SO .
Rosberg Linhares

@RosbergLinhares este script es equivalente al de PeterMortensen
Aidan Ryan

@AidanRyan, para mí el script de PeterMortensen no funcionó con los servicios Schedule y gpsvc.
Rosberg Linhares

Respuestas:


51

Hay una manera fácil de obtener la información que está solicitando (pero requiere un ligero cambio en su sistema):

Divida cada servicio para que se ejecute en su propio proceso SVCHOST.EXE y el servicio que consume los ciclos de la CPU será fácilmente visible en el Administrador de tareas o Explorador de procesos (se requiere el espacio después de "="):

SC Config Servicename Type= own

Haga esto en una ventana de línea de comandos o póngalo en un script BAT. Se requieren privilegios administrativos y se requiere reiniciar la computadora antes de que surta efecto.

El estado original se puede restaurar mediante:

SC Config Servicename Type= share

Ejemplo: para hacer que el Instrumental de administración de Windows se ejecute en un SVCHOST.EXE separado:

SC Config winmgmt Type= own

Esta técnica no tiene efectos nocivos, excepto quizás aumentar ligeramente el consumo de memoria. Y además de observar el uso de la CPU para cada servicio, también facilita observar los delta de fallas de página, la velocidad de lectura de E / S de disco y la velocidad de escritura de E / S de disco para cada servicio. Para Process Explorer, menú Ver / Seleccionar columnas: pestaña Memoria de proceso / Delta de falla de página, pestaña Desempeño de proceso / IO Delta Bytes de escritura, pestaña Desempeño de proceso / IO Delta Leer bytes, respectivamente.


En la mayoría de los sistemas, solo hay un proceso SVCHOST.EXE que tiene muchos servicios. He usado esta secuencia (se puede pegar directamente en una ventana de línea de comando):

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
Para los usuarios de PowerShell: Get-Service | ForEach-Object {C: \ Windows \ System32 \ SC.EXE config $ _. Name type = own}
Tamara Wijsman

1
En realidad, normalmente noto 3 o 4 instancias de svchost.exeen sistemas Windows XP. En este veo 6.
SamB

44
@TomWij: Tenga mucho cuidado al usar este fragmento; si está utilizando EFS (Sistema de cifrado de archivos) y lo configura, type= ownes posible que no funcione correctamente y se quedará sin acceso a los archivos que están cifrados con él (lo que puede ser catastrófico si los archivos del sistema operativo están encriptados!)
Beau

@Beau: ¿Sabes por qué explícitamente?
Tamara Wijsman

2
@ Peter Mortensen: he creado la herramienta de divulgación de servicios . 1. Almacena servicios que comparten el proceso svchost.exe. 2. Configura servicios para ejecutarse en un proceso separado. 3. Devuelve todos los servicios almacenados en el paso 1 a un solo proceso. Tus comentarios y sugerencias son bienvenidos. Gracias por la idea
Dmytro Ovdiienko

18

Puede usar el tasklistcomando incorporado y filtrar por nombre de servicio ( /ficonmutador), por ejemplo:

 tasklist /fi "services eq TermService"

Salida:

Nombre de imagen Nombre de sesión PID # de sesión Uso de memoria
========================= ======== ================ = ========== ============
svchost.exe 2940 Consola 0 7.096 K

Si no conoce un nombre, puede enumerarlos ejecutando esta declaración:

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

Enumera todos los servicios alojados por svchost.exe, por ejemplo:

Nombre de imagen Servicios PID
========================= ======== ================= ===========================
svchost.exe 632 DcomLaunch
svchost.exe 684 RpcSs
svchost.exe 748 Dhcp, Dnscache
svchost.exe 788 LmHosts, W32Time
svchost.exe 804 AeLookupSvc, AudioSrv, Navegador, CryptSvc,
                                   dmserver, EventSystem, helpvc,
                                   lanmanserver, lanmanworkstation, Messenger,
                                   Netman, Nla, RasMan, Schedule, seclogon,
                                   SENS, ShellHWDetection, TrkWks, winmgmt,
                                   wuauserv, WZCSVC
svchost.exe 1140 ERSvc
svchost.exe 1712 RemoteRegistry
svchost.exe 196 W3SVC
svchost.exe 2940 TermService
svchost.exe 2420 TapiSrv

Los servicios no están necesariamente alojados por svchost.exe. Entonces, si no puede encontrar un servicio de filtrado por el nombre del archivo en ejecución, simplemente ejecute tasklist /svc. Mostrará todos los servicios.


66
Esto no parece mostrar la memoria utilizada por un servicio individual, como se solicitó en la pregunta.
Duncan Jones

9

De hecho, Process Explorer le mostrará el uso de memoria individual dentro de svchost Asegúrese de tener la última versión desde aquí http://technet.microsoft.com/en-us/sysinternals/bb896653

Asegúrese de ejecutar el Explorador de procesos como administrador, haga clic en el svchost que desea inspeccionar, haga clic en el View DLLsbotón (o CTRL+D). Haga clic derecho en los encabezados en la ventana de DLL Select Columns..., luego verifique WS Total Bytesy presione OK.

Ahora puede ver y ordenar el uso de memoria de servicios individuales (implementados por dlls) dentro de svchost.


44
No muestra el tamaño del montón.
Der_Meister

7

Mientras que Process Monitor es una utilidad de propósito general (que hará todo menos lavar los platos por usted), para esta pregunta en particular desea usar VMMap (otra utilidad SysInternals)

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

VMMap es una utilidad de análisis de memoria virtual y física de proceso. Muestra un desglose de los tipos de memoria virtual comprometidos de un proceso, así como la cantidad de memoria física (conjunto de trabajo) asignada por el sistema operativo a esos tipos. Además de las representaciones gráficas del uso de la memoria, VMMap también muestra información resumida y un mapa detallado de la memoria del proceso. Las potentes capacidades de filtrado y actualización le permiten identificar las fuentes del uso de la memoria del proceso y el costo de la memoria de las características de la aplicación.

Además de vistas flexibles para analizar procesos en vivo, VMMap admite la exportación de datos en múltiples formas, incluido un formato nativo que conserva toda la información para que pueda volver a cargarla. También incluye opciones de línea de comandos que permiten escenarios de secuencias de comandos.


55
¡Guay! Ahora, ¿hay alguna forma de rastrear el uso de un bloque de memoria de almacenamiento dinámico para el servicio individual que lo posee?
Aidan Ryan

3

Esto está entrando en el territorio de stackoverflow, pero si puede obtener estadísticas de memoria por subproceso, puede correlacionar aproximadamente eso con los dlls de servicio individuales al hacerlos coincidir con los dlls enumerados en la pila de subprocesos. Sin embargo, es demasiado para mi pequeño cerebro de administrador de sistemas.


2

Extiendo la respuesta de Peter Mortensen aquí. Antes de modificar el tipo de servicios, verifique el tipo existente mediante un comando como:

sc query wuauserv

Lo que dará como resultado los siguientes:

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

Cualquier tipo que no sea "10 WIN32_OWN_PROCESS", "20 WIN32_SHARE_PROCESS" no debe modificarse.


1

Separar los servicios es la respuesta correcta, pero el comando sc config no funcionó para mí (2008 R2).

Sin embargo, puede hacerlo a través del registro, lo que significa establecer el parámetro "Tipo" en 0x00000010 (dec. 16):

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

Sin embargo, tenga cuidado con el servicio que elige modificar, hay tipos especiales además de "propio" y "compartir" que no se deben cambiar, como:

  • núcleo
  • filesys
  • rec
  • adaptar

Después de eso, simplemente reinicie el servicio y debería ver en ProcessExplorer que ahora tiene su propio proceso svchost.exe.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.