Monitoraggio dell'utilizzo della CPU e della memoria per processo


163

Ho il sospetto che una delle mie applicazioni consuma più cicli di CPU di quanti ne voglia. Il problema è che succede a raffiche e solo guardare il task manager non mi aiuta in quanto mostra solo un utilizzo immediato.

C'è un modo (su Windows) per tenere traccia della cronologia dell'utilizzo della CPU e della memoria per alcuni processi. Ad esempio, inizierò a monitorare "firefox" e dopo circa un'ora vedremo un grafico dell'utilizzo della CPU e della memoria durante quell'ora.

Sto cercando uno strumento già pronto o un modo programmatico per raggiungere questo obiettivo.

Risposte:


167

Basta digitare perfmonin Start > Rune premere invio. Quando la finestra Prestazioni è aperta, fare clic sul segno + per aggiungere nuovi contatori al grafico. I contatori sono aspetti diversi di come funziona il tuo PC e sono raggruppati per somiglianza in gruppi chiamati "Performance Object".

Per le tue domande, puoi scegliere gli oggetti prestazione "Elaborazione", "Memoria" e "Processore". È quindi possibile visualizzare questi contatori in tempo reale

È inoltre possibile specificare l'utilità per salvare i dati sulle prestazioni per l'ispezione in un secondo momento. Per fare ciò, seleziona "Registri e avvisi sulle prestazioni" nel riquadro di sinistra. (È proprio sotto la console di System Monitor che ci fornisce i contatori sopra menzionati. Se non è presente, fai clic su "File"> "Aggiungi / rimuovi snap-in", fai clic su Aggiungi e seleziona "Registri e avvisi sulle prestazioni" nell'elenco ".) Da" Registri e avvisi sulle prestazioni ", creare una nuova configurazione di monitoraggio in" Registri contatori ". Quindi è possibile aggiungere i contatori, specificare la frequenza di campionamento, il formato del registro (binario o di testo semplice) e la posizione del registro.


1
Qual è l'intervallo ideale per acquisire un campione di dati in un registro contatori?
— Steph Rose,

8
MS ha ovviamente cambiato l'interfaccia utente in PerformanceMonitor da quando hai scritto questo. Qualche idea su come farlo in Windows 2008 R2?
— Martin Brown,

5
@MartinBrown - Trovato questo . È eccellente
— JNF,

2
qualcuno sa come fare la seconda parte del salvataggio di un registro su Vista? Sembra che non ci siano "Registri e avvisi sulle prestazioni" da nessuna parte
— Xitcod13

11
Fare clic con il pulsante destro del mouse su Set di raccolte dati-> Definito dall'utente. Seleziona Nuovo-> Set di raccolta dati. Dagli un nome e seleziona Crea manualmente. Fai clic su Avanti. Seleziona Contatore delle prestazioni. Fai clic su Avanti. Aggiungi i contatori delle prestazioni e inserisci l'intervallo di campionamento. Quindi in Set di raccolte dati fai clic con il pulsante destro del mouse sul set e fai clic su "Avvia". Dopo qualche tempo fai clic con il pulsante destro del mouse sul set e fai clic su "Stop". Quindi puoi trovare il rapporto in Rapporti-> Definito dall'utente-> Il tuo set. Fare clic con il tasto destro sul grafico e selezionare Salva dati con nome.
— Gremio,

43

Process Explorer può mostrare il tempo totale della CPU impiegato da un processo, nonché un grafico cronologico per processo.


3
Quindi, come lo useresti per trovare un processo che inizia casualmente usando più memoria o potenza del processore in breve tempo. Potresti elaborare?
— Xitcod13,

Fare clic con il tasto destro del mouse sulle intestazioni delle colonne, selezionare Seleziona colonne, quindi selezionare "Cronologia CPU" in "Prestazioni del processo"
— Laurent

puoi resettarlo a zero?
— Simon_Weaver,

Posso accedere a un file con il consumo di memoria di un determinato PID?
— Royi,

Volevo solo sottolineare per altri utenti: il grafico della CPU per ciascun processo inizia a registrare solo dopo averlo aperto per la prima volta, anche se Process Explorer era aperto, quindi questo metodo è praticamente inutile per catturare un evento sporadico e provare a isolarlo ad un singolo processo. Sottolineerò che se si fa clic sul grafico della CPU di sistema globale (che inizia a registrare all'apertura di Process Explorer) e si passa il mouse su qualsiasi punto, mostrerà il processo che ha maggiormente utilizzato la CPU in quel punto.
— SUM1

19

Utilizzando perfmon.exe, ho provato a utilizzare il contatore "Byte privati" in Contatori "Processo" per tenere traccia dell'utilizzo della memoria e funziona bene.


1
Questa è la risposta corretta È anche possibile ottenere informazioni sulla CPU in Processo. Fai clic su Elabora, quindi seleziona l'app (Firefox nel tuo esempio) nelle istanze dell'oggetto selezionato.
— Chris McCowan,

11

forse puoi usarlo. Dovrebbe funzionare per te e riporterà il tempo del processore per il processo specificato.

@echo off
: Rich Kreider <rjk@techish.net>
: report processor time for given process until process exits (could be expanded to use a PID to be more
: precise)
: Depends:  typeperf
: Usage:  foo.cmd <processname>

set process=%~1
echo Press CTRL-C To Stop...
:begin
for /f "tokens=2 delims=," %%c in ('typeperf "\Process(%process%)\%% Processor Time" -si 1 -sc 1 ^| find /V "\\"') do (
if %%~c==-1 (
goto :end
) else (
echo %%~c%%
goto begin
)
)

:end
echo Process seems to have terminated.

7

Sono d'accordo, perfmon.exe consente di aggiungere contatori (tasto destro sul pannello di destra) per qualsiasi processo che si desidera monitorare.

Oggetto prestazioni: processo Controlla "Seleziona istanze dall'elenco" e seleziona Firefox.


1
Grazie. Come posso vedere la cronologia dell'utilizzo della cpu in un tempo predefinito, ad esempio un'ora?
— Eli Bendersky,

6

WMI è Strumentazione gestione Windows ed è integrato in tutte le versioni recenti di Windows. Ti consente di tenere traccia programmaticamente di cose come l'utilizzo della CPU, l'I / O del disco e l'utilizzo della memoria.

Perfmon.exe è un front-end della GUI per questa interfaccia e può monitorare un processo, scrivere informazioni in un registro e consentire di analizzare il registro dopo il fatto. Non è il programma più elegante del mondo, ma fa il suo lavoro.


5
Tecnicamente perfmon è un'interfaccia per l'API del contatore delle prestazioni di Windows che precede WMI di molti anni. WMI espone anche l'API del contatore delle prestazioni all'interno del suo spazio dei nomi.
— Rob Walker,

2

Process Lasso è progettato più per l'automazione dei processi e l'ottimizzazione della classe di priorità, non per i grafici. Ciò detto, fa offerta per processo storia utilizzo della CPU (disegnato come una linea bianca sul grafico), ma lo fa non offrono per processo storia l'utilizzo della memoria.

NOTA BENE: sono l'autore di Process Lasso, ma in realtà non lo sto approvando qui - poiché ci sono soluzioni migliori (perfmon è il migliore).

La cosa migliore di sempre è Windows Vista + Resource and Performance Monitor. Può tenere traccia dell'utilizzo della CPU, della memoria, della rete e degli accessi al disco da parte dei processi nel tempo. È una grande utility di informazioni di sistema complessive che avrebbe dovuto essere creata molto tempo fa. A meno che non mi sbagli, può tenere traccia della CPU per processo e dell'utilizzo della memoria nel tempo (tra le altre cose elencate).


2

Puoi anche provare a utilizzare uno script C # / Perl / Java per ottenere i dati di utilizzo utilizzando i comandi WMI e di seguito sono riportati i passaggi per farlo.

Dobbiamo eseguire 2 query WMI Select e applicare la formula di utilizzo% CPU

1. Per recuperare il numero totale di processo logico

select NumberOfLogicalProcessors from Win32_ComputerSystem

2. Per recuperare i valori di PercentProcessorTime, TimeStamp_Sys100NS (è stata applicata la formula di utilizzo della CPU ottenere la percentuale di utilizzo effettiva) e WorkingSetPrivate (RAM) almeno 2 volte con un intervallo di sospensione di 1 secondo

select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234

3. Applicare la formula di utilizzo% CPU

CPU%= ((p2-p1)/(t2-t1)*100)/NumberOfLogicalProcessors

p2 indica PercentProcessorTime recuperato per la seconda volta e p1 indica PercentProcessorTime recuperato per la prima volta, t2 e t1 è per TimeStamp_Sys100NS.

Un esempio di codice Perl è disponibile nel link http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/

Questa logica si applica a tutto il linguaggio di programmazione che supporta le query WMI


WMI e Powershell?
— PreguntonCojoneroCabrón

2

Anche se non l'ho provato, ProcDump sembra una soluzione migliore.

Descrizione dal sito:

ProcDump è un'utilità della riga di comando il cui scopo principale è il monitoraggio di un'applicazione per picchi di CPU e la generazione di crash dump durante un picco che un amministratore o uno sviluppatore può utilizzare per determinare la causa del picco. ProcDump include anche il monitoraggio delle finestre sospese (utilizzando la stessa definizione di finestre sospese utilizzate da Windows e Task Manager), il monitoraggio delle eccezioni non gestite e può generare dump in base ai valori dei contatori delle prestazioni del sistema. Può anche fungere da utilità di dump di processo generale che è possibile incorporare in altri script.





1

In Windows 10, Task Manager può mostrarti ore CPU cumulative. Vai alla scheda "Cronologia app" e "Elimina cronologia utilizzo". Ora lascia le cose in esecuzione per un'ora o due:

Tempo cumulativo della CPU di Windows 10

Ciò che NON fa è scomporre l'utilizzo nei browser per scheda. Molto spesso le schede inattive faranno un'enorme quantità di lavoro, con ogni scheda aperta che consuma energia e rallenta il PC.


1

Era necessario ottenere lo stato e l'utilizzo della CPU / memoria di alcuni server Windows specifici. Ho usato sotto lo script:

Questo è un esempio del servizio di ricerca di Windows.

  $cpu = Get-WmiObject win32_processor
  $search = get-service "WSearch"
  if ($search.Status -eq 'Running')
  {
  $searchmem = Get-WmiObject Win32_Service -Filter "Name = 'WSearch'"
  $searchid = $searchmem.ProcessID
  $searchcpu1 = Get-WmiObject Win32_PerfRawData_PerfProc_Process | Where {$_.IDProcess -eq $searchid}
  Start-Sleep -Seconds 1
  $searchcpu2 = Get-WmiObject Win32_PerfRawData_PerfProc_Process | Where {$_.IDProcess -eq $searchid}
  $searchp2p1 = $searchcpu2.PercentProcessorTime - $searchcpu1.PercentProcessorTime
  $searcht2t1 = $searchcpu2.Timestamp_Sys100NS - $searchcpu1.Timestamp_Sys100NS
  $searchcpu = [Math]::Round(($searchp2p1 / $searcht2t1 * 100) /$cpu.NumberOfLogicalProcessors, 1)
  $searchmem = [Math]::Round($searchcpu1.WorkingSetPrivate / 1mb,1)
  Write-Host 'Service is' $search.Status', Memory consumed: '$searchmem' MB, CPU Usage: '$searchcpu' %'
  }

  else
  {
  Write-Host Service is $search.Status -BackgroundColor Red
  }

0

Uso taskinfo per il grafico cronologico della velocità CPU / RAM / IO. http://www.iarsn.com/taskinfo.html

Ma scoppia di insensibilità, suona più come un tempo di interruzione a causa di un disco HD / SS difettoso.

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.