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.
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:
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.
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.
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)
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.
¡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.
Respuestas:
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 "="):
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:
Ejemplo: para hacer que el Instrumental de administración de Windows se ejecute en un SVCHOST.EXE separado:
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):
fuente
svchost.exe
en sistemas Windows XP. En este veo 6.type= own
es 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!)Puede usar el
tasklist
comando incorporado y filtrar por nombre de servicio (/fi
conmutador), por ejemplo:Salida:
Si no conoce un nombre, puede enumerarlos ejecutando esta declaración:
Enumera todos los servicios alojados por svchost.exe, por ejemplo:
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 ejecutetasklist /svc
. Mostrará todos los servicios.fuente
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 DLLs
botón (o CTRL+D). Haga clic derecho en los encabezados en la ventana de DLLSelect Columns...
, luego verifiqueWS Total Bytes
y presioneOK
.Ahora puede ver y ordenar el uso de memoria de servicios individuales (implementados por dlls) dentro de svchost.
fuente
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.
fuente
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.
fuente
Extiendo la respuesta de Peter Mortensen aquí. Antes de modificar el tipo de servicios, verifique el tipo existente mediante un comando como:
Lo que dará como resultado los siguientes:
Cualquier tipo que no sea "10 WIN32_OWN_PROCESS", "20 WIN32_SHARE_PROCESS" no debe modificarse.
fuente
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):
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:
Después de eso, simplemente reinicie el servicio y debería ver en ProcessExplorer que ahora tiene su propio proceso svchost.exe.
fuente