45 votes

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

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


Notez que c'est similaire à Finegrained performance reporting on svchost.exe

52voto

ebruchez Points 2800

Il y a un moyen facile d'obtenir les informations que vous demandez (mais cela nécessite un léger changement dans votre système) :

Divisez chaque service pour s'exécuter dans son propre processus SVCHOST.EXE et le service qui consomme les cycles CPU sera facilement visible dans le Gestionnaire des tâches ou dans l'Explorateur de processus (l'espace après "=" est requis) :

SC Config NomDuService Type= own

Faites-le dans une fenêtre de ligne de commande ou mettez-le dans un script BAT. Des privilèges administratifs sont requis et un redémarrage de l'ordinateur est nécessaire avant que cela prenne effet.

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

SC Config NomDuService Type= share

Exemple : pour faire fonctionner la Gestion des services Windows dans un processus SVCHOST.EXE séparé :

SC Config winmgmt Type= own

Cette technique n'a aucun effet indésirable, sauf peut-être une légère augmentation de la consommation de mémoire. Et en plus d'observer l'utilisation du CPU pour chaque service, cela permet également d'observer facilement le delta des défauts de page, le taux de lecture d'E/S disque et le taux d'écriture d'E/S disque pour chaque service. Pour Process Explorer, menu Affichage/Sélection des colonnes : onglet Mémoire du processus/Delta des défauts de page, onglet Performance du processus/Delta E/S en écriture, onglet Performance du processus/Delta E/S en lecture, respectivement.


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

rem  1. "Mises à jour automatiques"
SC Config wuauserv Type= own

rem  2. "Système d'événements COM+"
SC Config EventSystem Type= own

rem  3. "Explorateur d'ordinateur"
SC Config Browser Type= own

rem  4. "Services de cryptographie"
SC Config CryptSvc Type= own

rem  5. "Suivi des liens distribués"
SC Config TrkWks Type= own

rem  6. "Assistance et support"
SC Config helpsvc Type= own

rem  7. "Gestionnaire de disques logiques"
SC Config dmserver Type= own

rem  8. "Connexions réseau"
SC Config Netman Type= own

rem  9. "Connaissance d'emplacement réseau"
SC Config NLA Type= own

rem 10. "Gestionnaire de connexions d'accès distant"
SC Config RasMan Type= own

rem 11. "Ouverture de session secondaire"
SC Config seclogon Type= own

rem 12. "Serveur"
SC Config lanmanserver Type= own

rem 13. "Détection matérielle de shell"
SC Config ShellHWDetection Type= own

rem 14. "Notification d'événement système"
SC Config SENS Type= own

rem 15. "Service de restauration du système"
SC Config srservice Type= own

rem 16. "Planificateur de tâches"
SC Config Schedule Type= own

rem 17. "Téléphonie"
SC Config TapiSrv Type= own

rem 18. "Services Terminal"
SC Config TermService Type= own

rem 19. "Thèmes"
SC Config Themes Type= own

rem 20. "Audio Windows"
SC Config AudioSrv Type= own

rem 21. "Fermeture Windows/Pare-feu partages de connexion Internet (ICS)"
SC Config SharedAccess Type= own

rem 22. "Gestion Instrumentation Windows"
SC Config winmgmt Type= own

rem 23. "Configuration sans fil"
SC Config WZCSVC Type= own

rem 24. "Station de travail"
SC Config lanmanworkstation Type= own

rem Fin.

21voto

Bob Points 34449

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

 tasklist /fi "services eq TermService"

Sortie :

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
svchost.exe                   2940 Console                    0      7.096 K

Si vous ne connaissez pas un nom, vous pouvez les lister en exécutant cette commande :

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

Cela liste tous les services hébergés par svchost.exe, par exemple :

Image Name                     PID Services
========================= ======== ============================================
svchost.exe                    632 DcomLaunch
svchost.exe                    684 RpcSs
svchost.exe                    748 Dhcp, Dnscache
svchost.exe                    788 LmHosts, W32Time
svchost.exe                    804 AeLookupSvc, AudioSrv, Browser, CryptSvc,
                                   dmserver, EventSystem, helpsvc,
                                   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 pouvez pas trouver un service en filtrant par le nom du fichier exécutant, exécutez simplement tasklist /svc. Il affichera tous les services.

10voto

Chris T. Points 101

Le gestionnaire de processus affichera en effet l'utilisation individuelle de la mémoire dans svchost Assurez-vous d'avoir la dernière version d'ici https://docs.microsoft.com/sysinternals/downloads/process-explorer

Veillez à exécuter Process Explorer en tant qu'administrateur, cliquez sur le svchost que vous souhaitez inspecter, cliquez sur le bouton Voir DLLs (ou CTRL+D). Cliquez avec le bouton droit sur les en-têtes de la fenêtre DLLs, Sélectionner les colonnes..., cochez ensuite WS Total Bytes, et cliquez sur OK.

Maintenant, vous pouvez afficher et trier sur l'utilisation de la mémoire des services individuels (implémentés par des dlls) dans le svchost.

8voto

David Crow Points 7704

Alors que Process Monitor est un utilitaire polyvalent (qui fera tout sauf vous laver la vaisselle), pour cette question particulière, vous voulez utiliser VMMap (un autre utilitaire SysInternals)

https://docs.microsoft.com/sysinternals/downloads/vmmap

VMMap est un utilitaire d'analyse de la mémoire virtuelle et physique des processus. Il montre une ventilation des types de mémoire virtuelle engagé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. En plus des représentations graphiques de l'utilisation de la mémoire, VMMap montre également des informations résumées et une carte mémoire détaillée du processus. De puissantes capacités de filtrage et de rafraîchissement vous permettent d'identifier les sources de l'utilisation de la mémoire du processus et le coût en mémoire des fonctionnalités de l'application.

En plus de vues flexibles pour analyser les 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 pour que vous puissiez les recharger. Il inclut également des options en ligne de commande qui permettent des scénarios de script.

3voto

Ryan Rinaldi Points 1683

Cela commence à relever du territoire de stackoverflow, mais si vous pouvez obtenir des statistiques de mémoire par thread, vous pourrez peut-être les corrélations approximativement aux dlls de service individuels en les faisant correspondre aux dlls répertoriées dans la pile de thread. Bien trop pour mon minuscule cerveau d'administrateur système, cependant.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X