web-dev-qa-db-fra.com

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

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


Notez que cela est similaire à rapports de performances raffinés sur svchost.exe

43
Aidan Ryan

Il existe un moyen facile 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 le Gestionnaire des tâches ou l'Explorateur de processus (l'espace après "=" est requis):

SC Config Servicename Type= own

Faites-le dans une fenêtre de ligne de commande ou placez-le dans un script BAT. Les privilèges administratifs sont requis et un redémarrage de l'ordinateur est requis avant qu'il 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 SVCHOST.EXE distinct:

SC Config winmgmt Type= own

Cette technique n'a aucun effet néfaste, sauf peut-être en augmentant légèrement la consommation de mémoire. En plus d'observer l'utilisation du processeur pour chaque service, il est également facile d'observer le delta des défauts de page, le taux de lecture des E/S disque et le taux d'écriture des E/S disque pour chaque service. Pour Process Explorer, menu Afficher/Sélectionner les colonnes: onglet Process Memory/Page Fault Delta, onglet Process Performance/IO Delta Write Bytes, onglet Process Performance/IO Delta By Bytes, respectivement.


Sur la plupart des systèmes, il n'y a qu'un seul processus SVCHOST.EXE qui a beaucoup de 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.
51
Peter Mortensen

Vous pouvez utiliser la commande tasklist intégrée et filtrer par nom de service (/fi switch), par exemple:

 tasklist /fi "services eq TermService"

Production:

 Nom de l'image PID Nom de session Session # Utilisation de Mem 
 ========================= ====== == ================ =========== ============ 
 svchost.exe 2940 Console 0 7,096 K 

Si vous ne connaissez pas de nom, vous pouvez les répertorier en exécutant 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 RpcS 
 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, 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 

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

19
splattne

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

Assurez-vous d'exécuter Process Explorer en tant qu'administrateur, cliquez sur le svchost que vous souhaitez inspecter, cliquez sur le bouton View DLLs (Ou CTRL+D). Cliquez avec le bouton droit sur les en-têtes de la fenêtre DLL, Select Columns..., Puis cochez WS Total Bytes Et appuyez sur OK.

Vous pouvez maintenant visualiser et trier l'utilisation de la mémoire des services individuels (implémentés par les DLL) dans svchost.

9
Chris T.

Bien que Process Monitor soit un utilitaire à usage général (qui fera 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 montre une ventilation des types de mémoire virtuelle validée d'un processus ainsi que la quantité de mémoire physique (ensemble de travail) attribuée par le système d'exploitation à ces types. 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 capacités de filtrage et d'actualisation vous permettent d'identifier les sources d'utilisation de la mémoire de processus et le coût de la 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 préserve toutes les informations afin que vous puissiez les recharger. Il comprend également la ligne de commande options qui permettent des scénarios de script.

7
Sean Earp

Cela entre dans le territoire de stackoverflow, mais si vous pouvez obtenir des statistiques de mémoire par thread, vous pourrez peut-être corréler approximativement cela avec les DLL de service individuelles en les faisant correspondre aux DLL répertoriées dans la pile de threads. Beaucoup trop pour mon petit cerveau d'administrateur système, cependant.

3
user2278

J'étends ici la réponse de Peter Mortensen. Avant de modifier le type de services, veuillez vérifier le type existant par commande comme:

sc query wuauserv

Qui produira les éléments 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é.

2
sken130

La séparation des 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 définir le paramètre "Type" sur 0x00000010 (déc. 16):

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

Attention cependant 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.

1
Michael Böckling