Comment trouver l'utilisation de la mémoire de services Windows individuels?

42

Le Gestionnaire des tâches affiche l'utilisation de la mémoire globale de svchost.exe. Existe-t-il un moyen de visualiser l'utilisation de la mémoire de chaque service?


Notez que ceci est similaire à la génération de rapports de performances détaillées sur svchost.exe.

Aidan Ryan
la source
1
Pour quiconque (comme moi) ayant le même problème: - Gestionnaire de tâches Windows -> Performances (onglet) -> Moniteur de ressources (bouton) - Et vous obtenez svchost.exe scindé par service sur Windows 7
Oliver,
1
@Oliver Resource Monitor affiche le nombre de CPU par service, mais cette question concerne la mémoire.
Aidan Ryan
Vous pouvez voir un script pour vérifier la mémoire de services individuels dans cette réponse SO .
Rosberg Linhares
@RosbergLinhares ce script est équivalent à PeterMortensen
Aidan Ryan
@AidanRyan, pour moi le script de PeterMortensen ne fonctionnait pas avec les services Schedule et gpsvc.
Rosberg Linhares

Réponses:

51

Il existe un moyen simple d'obtenir les informations que vous demandez (mais cela nécessite une légère modification de votre système):

Divisez chaque service pour qu'il s'exécute dans son propre processus SVCHOST.EXE et le service consommant les cycles de processeur sera facilement visible dans Task Manager ou Process Explorer (l'espace après "=" est requis):

SC Config Servicename Type= own

Faites-le dans une fenêtre de ligne de commande ou insérez-le dans un script BAT. Des privilèges d'administrateur sont requis et un redémarrage de l'ordinateur est requis avant que celui-ci ne prenne effet.

L'état d'origine peut être restauré par:

SC Config Servicename Type= share

Exemple: pour exécuter Windows Management Instrumentation dans un fichier SVCHOST.EXE distinct:

SC Config winmgmt Type= own

Cette technique n’a aucun effet néfaste, sauf peut-être une légère augmentation de la consommation de mémoire. Outre l'observation de l'utilisation de l'UC pour chaque service, cela facilite également l'observation du delta des fautes de page, du taux de lecture des E / S de disque et du taux d'écriture des E / S de disques pour chaque service. Pour Process Explorer, menu View / Select Columns: onglet Process Mémoire / Delta de défaut de page, onglet Process Performance / Octets d'écriture Delta IO, onglet Process Performance / Octets de lecture Delta IO, respectivement.


Sur la plupart des systèmes, il n’existe qu’un seul processus SVCHOST.EXE comportant de nombreux services. J'ai utilisé cette séquence (elle peut être collée directement dans une fenêtre de ligne de commande):

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
la source
12
Pour les utilisateurs de PowerShell: Get-Service | Objet ForEach {C: \ Windows \ System32 \ SC.EXE config $ _. Nom type = propre}
Tamara Wijsman le
1
En fait, je remarque généralement 3 ou 4 instances de svchost.exesystèmes Windows XP. Sur celui-ci, j'en vois 6.
SamB
4
@TomWij: Soyez extrêmement prudent lorsque vous utilisez cet extrait: si vous utilisez EFS (Encrypting File System) et que vous le définissez, type= ownil risque de ne pas fonctionner correctement et vous ne pourrez accéder à aucun fichier crypté avec celui-ci (ce qui catastrophique si les fichiers du système d’exploitation sont cryptés!)
Beau
@Beau: Savez-vous pourquoi explicitement?
Tamara Wijsman le
2
@ Peter Mortensen: J'ai créé l' outil Service Disclosure . Il 1. Stocke les services qui partagent le processus svchost.exe. 2. Configure les services pour qu'ils s'exécutent dans un processus séparé. 3. Renvoie tous les services stockés à l'étape 1 à un processus. Vos commentaires et suggestions sont les bienvenus. Merci pour l'idée.
Dmytro Ovdiienko
18

Vous pouvez utiliser la tasklistcommande intégrée et filtrer par nom de service ( /ficommutateur), par exemple:

 tasklist /fi "services eq TermService"

Sortie:

Nom de l'image Nom de la session PID Session # Mem Utilisation
=============================================== =======================
svchost.exe 2940 Console 0 7.096 K

Si vous ne connaissez pas de nom, vous pouvez les lister en lançant cette instruction:

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

Il répertorie tous les services hébergés par svchost.exe, par exemple:

Nom de l'image Services PID
================================================ ===========================
svchost.exe 632 DcomLaunch
svchost.exe 684 RpcSs
svchost.exe 748 Dhcp, Dnscache
svchost.exe 788 LmHosts, W32Time
svchost.exe 804 AeLookupSvc, AudioSrv, Navigateur, CryptSvc,
                                   dmserver, EventSystem, helpvc,
                                   lanmanserver, lanmanworkstation, Messenger,
                                   Netman, Nla, RasMan, Calendrier, 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

Les services ne sont pas nécessairement hébergés par svchost.exe. Donc, si vous ne trouvez pas de service filtrant en fonction du nom du fichier en cours d'exécution, exécutez-le tasklist /svc. Il montrera tous les services.

éclabousser
la source
6
Cela ne semble pas montrer la mémoire utilisée par un service individuel, comme demandé dans la question.
Duncan Jones
9

Process Explorer vous montrera en effet l’utilisation individuelle de la mémoire dans svchost. Assurez-vous d’avoir la dernière version à partir d’ici http://technet.microsoft.com/en-us/sysinternals/bb896653.

Assurez-vous d’exécuter Process Explorer en tant qu’administrateur, cliquez sur le svchost que vous souhaitez inspecter, puis sur le View DLLsbouton (ou CTRL+D). Cliquez avec le bouton droit sur les en-têtes dans la fenêtre des DLL Select Columns..., puis cochez WS Total Byteset cliquez sur OK.

Vous pouvez maintenant afficher et trier l'utilisation de la mémoire de différents services (implémentée par des dll) dans svchost.

Chris T.
la source
4
Il ne montre pas la taille du tas.
Der_Meister
7

Alors que Process Monitor est un utilitaire à usage général (qui fait tout sauf laver la vaisselle pour vous), pour cette question particulière, vous souhaitez utiliser VMMap (un autre utilitaire SysInternals).

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

VMMap est un utilitaire d'analyse de mémoire virtuelle et physique de processus. Il présente une ventilation des types de mémoire virtuelle validée d'un processus, ainsi que la quantité de mémoire physique (ensemble de travail) affectée à ces types par le système d'exploitation. Outre les représentations graphiques de l'utilisation de la mémoire, VMMap affiche également des informations récapitulatives et une carte de mémoire de processus détaillée. De puissantes fonctionnalités de filtrage et d'actualisation vous permettent d'identifier les sources d'utilisation de la mémoire de processus et le coût en mémoire des fonctionnalités de l'application.

Outre des vues flexibles pour l'analyse des processus en direct, VMMap prend en charge l'exportation de données sous plusieurs formes, y compris un format natif qui conserve toutes les informations afin que vous puissiez les réimporter. Il inclut également des options de ligne de commande permettant d'activer des scénarios de script.

Sean Earp
la source
5
Cool! Existe-t-il maintenant un moyen de retracer l'utilisation d'un bloc de mémoire de tas au service individuel qui le possède?
Aidan Ryan
3

Cela entre dans le territoire de stackoverflow, mais si vous pouvez vous procurer des statistiques de mémoire par thread, vous pourrez peut-être le corréler approximativement aux dll de service individuelles en les mettant en correspondance avec les dll répertoriées dans la pile de thread. Beaucoup trop pour mon minuscule cerveau sysadmin, cependant.

utilisateur2278
la source
2

Je prolonge ici la réponse de Peter Mortensen. Avant de modifier le type de services, veuillez vérifier le type existant à l'aide d'une commande, comme suit:

sc query wuauserv

Ce qui produira les suivants:

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

Tout type autre que "10 WIN32_OWN_PROCESS", "20 WIN32_SHARE_PROCESS" ne doit pas être modifié.

sken130
la source
1

Séparer les services est la bonne réponse, mais la commande sc config n'a pas fonctionné pour moi (2008 R2).

Vous pouvez le faire via le registre, ce qui signifie que vous définissez le paramètre "Type" sur 0x00000010 (déc. 16):

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

Faites attention au service que vous choisissez de modifier, il existe des types spéciaux en plus de "posséder" et "partager" qui ne doivent pas être modifiés, comme:

  • noyau
  • filesys
  • rec
  • adapter

Après cela, redémarrez simplement le service et vous devriez voir dans ProcessExplorer qu’il a maintenant son propre processus svchost.exe.

Michael Böckling
la source