Come trovare l'utilizzo della memoria dei singoli servizi di Windows?


42

Task Manager mostra l'utilizzo della memoria complessiva di svchost.exe. Esiste un modo per visualizzare l'utilizzo della memoria dei singoli servizi?


Si noti che è simile al reporting delle prestazioni Finegrained su svchost.exe


1
Per chiunque (come me) che ha lo stesso problema: - Task Manager di Windows -> Prestazioni (scheda) -> Monitor risorse (pulsante) - E ottieni svchost.exe diviso per servizio Su Windows 7
Oliver

1
@Oliver Resource Monitor mostra la CPU per servizio, ma questa domanda riguarda la memoria.
Aidan Ryan,

È possibile visualizzare uno script per controllare la memoria dei singoli servizi in questa risposta SO .
Rosberg Linhares,

@RosbergLinhares questa sceneggiatura è equivalente a quella di PeterMortensen
Aidan Ryan,

@AidanRyan, per me la sceneggiatura di PeterMortensen non ha funzionato con i servizi Schedule e gpsvc.
Rosberg Linhares,

Risposte:


51

C'è un modo semplice per ottenere le informazioni che stai chiedendo (ma richiede una leggera modifica al tuo sistema):

Dividi ogni servizio per eseguirlo nel proprio processo SVCHOST.EXE e il servizio che consuma i cicli della CPU sarà facilmente visibile in Task Manager o Process Explorer (lo spazio dopo "=" è richiesto):

SC Config Servicename Type= own

Fallo in una finestra della riga di comando o inseriscilo in uno script BAT. Sono richiesti privilegi di amministratore ed è necessario riavviare il computer prima che abbia effetto.

Lo stato originale può essere ripristinato da:

SC Config Servicename Type= share

Esempio: per eseguire la Strumentazione gestione Windows in un SVCHOST.EXE separato:

SC Config winmgmt Type= own

Questa tecnica non ha effetti negativi, tranne forse un leggero aumento del consumo di memoria. Oltre a osservare l'utilizzo della CPU per ciascun servizio, è anche facile osservare il delta degli errori di pagina, la velocità di lettura degli I / O del disco e la velocità di scrittura degli I / O del disco per ciascun servizio. Per Process Explorer, menu Visualizza / Seleziona colonne: scheda Memoria di processo / Delta errore di pagina, scheda Prestazioni di processo / IO Delta Scrittura byte, scheda Prestazione di processo / IO Delta Lettura byte, rispettivamente.


Sulla maggior parte dei sistemi esiste un solo processo SVCHOST.EXE che offre molti servizi. Ho usato questa sequenza (può essere incollata direttamente in una finestra della riga di 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
Per gli utenti di PowerShell disponibili: Get-Service | ForEach-Object {C: \ Windows \ System32 \ SC.EXE config $ _. Nome tipo = proprio}
Tamara Wijsman

1
In realtà, in genere noto 3 o 4 istanze svchost.exesu sistemi Windows XP. Su questo vedo 6.
SamB,

4
@TomWij: Siate estremamente attenti quando si usa questo frammento - se si utilizza EFS (Encrypting File System) e impostarlo type= ownpotrebbe non funzionare correttamente e ti verrà lasciato senza accesso a tutti i file crittografati con esso (che può sii catastrofico se i file del sistema operativo sono crittografati!)
Beau,

@Beau: sai perché esplicitamente?
Tamara Wijsman,

2
@Peter Mortensen: ho creato lo strumento di divulgazione del servizio . 1. Memorizza i servizi che condividono il processo svchost.exe. 2. Configura i servizi per l'esecuzione in un processo separato. 3. Restituisce tutti i servizi memorizzati al passaggio 1 di nuovo in un processo. I vostri commenti e suggerimenti sono benvenuti. Grazie per l'idea
Dmytro Ovdiienko,

18

È possibile utilizzare il tasklistcomando integrato e filtrare in base al nome del servizio ( /fiswitch), ad esempio:

 tasklist /fi "services eq TermService"

Produzione:

Nome immagine PID Nome sessione Sessione # Mem Usage
========================= ======== ================ = ========== ============
svchost.exe 2940 Console 0 7.096 K

Se non conosci un nome, puoi elencarli eseguendo questa istruzione:

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

Elenca tutti i servizi ospitati da svchost.exe, ad esempio:

Nome immagine Servizi PID
========================= ======== ================= ===========================
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, 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

I servizi non sono necessariamente ospitati da svchost.exe. Quindi, se non riesci a trovare un servizio di filtro in base al nome del file in esecuzione, esegui semplicemente tasklist /svc. Mostrerà tutti i servizi.


6
Ciò non sembra mostrare la memoria utilizzata da un singolo servizio, come richiesto nella domanda.
Duncan Jones,

9

Process Explorer ti mostrerà effettivamente l'utilizzo della memoria individuale all'interno di svchost Assicurati di avere l'ultima versione da qui http://technet.microsoft.com/en-us/sysinternals/bb896653

Assicurati di eseguire Process Explorer come amministratore, fai clic sullo svchost che vuoi controllare, fai clic sul View DLLspulsante (o CTRL+D). Fai clic con il pulsante destro del mouse sulle intestazioni nella finestra DLL Select Columns..., quindi controlla WS Total Bytese premi OK.

Ora è possibile visualizzare e ordinare l'utilizzo della memoria dei singoli servizi (implementati da DLL) all'interno di svchost.


4
Non mostra le dimensioni dell'heap.
Der_Meister,

7

Mentre Process Monitor è un'utilità di uso generale (che farà tutto tranne che lavare i piatti per te), per questa domanda particolare vuoi usare VMMap (un'altra utility di SysInternals)

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

VMMap è un'utilità di analisi della memoria fisica e virtuale di processo. Mostra una suddivisione dei tipi di memoria virtuale impegnati di un processo, nonché la quantità di memoria fisica (working set) assegnata dal sistema operativo a tali tipi. Oltre alle rappresentazioni grafiche dell'utilizzo della memoria, VMMap mostra anche informazioni di riepilogo e una mappa di memoria di processo dettagliata. Potenti funzionalità di filtro e aggiornamento consentono di identificare le fonti di utilizzo della memoria di processo e il costo della memoria delle funzionalità dell'applicazione.

Oltre alle viste flessibili per l'analisi dei processi attivi, VMMap supporta l'esportazione di dati in più moduli, incluso un formato nativo che conserva tutte le informazioni in modo da poterle caricare nuovamente. Include anche opzioni da riga di comando che abilitano scenari di scripting.


5
Freddo! Ora c'è un modo per tracciare l'utilizzo di un blocco di memoria heap sul singolo servizio che lo possiede?
Aidan Ryan,

3

Questo sta entrando nel territorio dello stackoverflow, ma se riesci a ottenere le statistiche di memoria per thread potresti essere in grado di correlare approssimativamente quello alle singole dll di servizio abbinandole fino alle dll elencate nello stack di thread. Troppo per il mio piccolo cervello di amministratore di sistema, però.


2

Estendo qui la risposta di Peter Mortensen. Prima di modificare il tipo di servizi, controlla il tipo esistente con un comando come:

sc query wuauserv

Che produrrà i seguenti:

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

Qualsiasi tipo diverso da "10 WIN32_OWN_PROCESS", "20 WIN32_SHARE_PROCESS" non deve essere modificato.


1

Separare i servizi è la risposta corretta, ma il comando sc config non ha funzionato per me (2008 R2).

Puoi farlo tramite il registro, il che significa che imposta il parametro "Tipo" su 0x00000010 (dec. 16):

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

Fai attenzione però a quale servizio scegli di modificare, oltre a "proprio" e "condividi" ci sono tipi speciali che non dovrebbero essere cambiati, come:

  • nocciolo
  • filesys
  • rec
  • adattare

Successivamente, riavvia il servizio e dovresti vedere in ProcessExplorer che ora ha il suo processo svchost.exe.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.