Suivi de l'utilisation du processeur et de la mémoire par processus

163

Je soupçonne qu'une de mes applications consomme plus de cycles CPU que je ne le souhaite. Le problème est que cela se produit par rafales, et le simple fait de regarder le gestionnaire de tâches ne m'aide pas car il montre uniquement l'utilisation immédiate.

Existe-t-il un moyen (sous Windows) de suivre l'historique de l'utilisation du processeur et de la mémoire pour certains processus. Par exemple, je vais commencer à suivre "firefox", et après environ une heure, je verrai un graphique de son utilisation du processeur et de la mémoire pendant cette heure.

Je recherche un outil prêt à l'emploi ou un moyen programmatique pour y parvenir.

Eli Bendersky
la source

Réponses:

167

Il suffit de taper perfmondans Start > Runet appuyez sur Entrée. Lorsque la fenêtre Performance est ouverte, cliquez sur le signe + pour ajouter de nouveaux compteurs au graphique. Les compteurs sont différents aspects du fonctionnement de votre PC et sont regroupés par similitude dans des groupes appelés «objet de performance».

Pour vos questions, vous pouvez choisir les objets de performance «Process», «Memory» et «Processor». Vous pouvez alors voir ces compteurs en temps réel

Vous pouvez également spécifier l'utilitaire pour enregistrer les données de performance pour votre inspection ultérieure. Pour ce faire, sélectionnez «Journaux et alertes de performances» dans le panneau de gauche. (C'est juste sous la console du Moniteur système qui nous fournit les compteurs mentionnés ci-dessus. Si ce n'est pas là, cliquez sur "Fichier"> "Ajouter / supprimer un composant logiciel enfichable", cliquez sur Ajouter et sélectionnez "Journaux et alertes de performances" dans la liste ".) À partir des" Journaux et alertes de performance ", créez une nouvelle configuration de surveillance sous" Journaux de compteur ". Ensuite, vous pouvez ajouter les compteurs, spécifier la fréquence d'échantillonnage, le format du journal (binaire ou texte brut) et l'emplacement du journal.

Martin08
la source
1
Quel est l'intervalle idéal pour saisir un échantillon de données dans un journal de compteur?
Steph Rose
8
MS a évidemment changé l'interface utilisateur en PerformanceMonitor depuis que vous avez écrit ceci. Une idée de la façon dont vous faites cela dans Windows 2008 R2?
Martin Brown
5
@MartinBrown - J'ai trouvé ça . C'est excellent.
JNF
2
quelqu'un sait comment faire la deuxième partie de l'enregistrement d'un journal sur vista? Il ne semble pas y avoir de "Journaux et alertes de performances" n'importe où
Xitcod13
11
Cliquez avec le bouton droit sur Ensembles de collecteurs de données -> Défini par l'utilisateur. Sélectionnez Nouveau-> Ensemble de collecteurs de données. Donnez-lui un nom et sélectionnez Créer manuellement. Cliquez sur Suivant. Sélectionnez Compteur de performances. Cliquez sur Suivant. Ajoutez les compteurs de performance et entrez l'intervalle d'échantillonnage. Ensuite, sous Ensembles de collecteurs de données, faites un clic droit sur votre ensemble et cliquez sur «Démarrer». Après un certain temps, vous faites un clic droit sur votre ensemble et cliquez sur "Arrêter". Ensuite, vous pouvez trouver le rapport sous Rapports-> Défini par l'utilisateur-> Votre ensemble. Cliquez avec le bouton droit sur le graphique et sélectionnez Enregistrer les données sous.
Gremio
43

Process Explorer peut afficher le temps CPU total pris par un processus, ainsi qu'un graphique d'historique par processus.

Niall
la source
3
Alors, comment l'utiliseriez-vous pour trouver un processus qui commence aléatoirement à utiliser plus de mémoire ou de puissance de processeur en une courte période. Pourriez-vous élaborer?
Xitcod13
Faites un clic droit sur les en-têtes de colonne, choisissez Sélectionner les colonnes, puis vérifiez "Historique du processeur" sous "Performances du processus"
Laurent
pouvez-vous le remettre à zéro?
Simon_Weaver
Puis-je enregistrer dans un fichier la consommation de mémoire d'un PID donné?
Royi
Je voulais juste signaler pour les autres utilisateurs: le graphique du processeur pour chaque processus ne commence à enregistrer qu'après l'avoir ouvert pour la première fois, même si Process Explorer était ouvert, donc cette méthode est pratiquement inutile pour capturer un événement sporadique et essayer de l'isoler à un seul processus. Je soulignerai que si vous cliquez sur le graphique du processeur global du système (qui commence à enregistrer lors de l'ouverture de Process Explorer) et que vous passez votre souris sur n'importe quel point, il affichera le processus qui a le plus utilisé le processeur à ce stade.
SUM1
19

En utilisant perfmon.exe, j'ai essayé d'utiliser le compteur "Private Bytes" sous les compteurs "Process" pour suivre l'utilisation de la mémoire et cela fonctionne bien.

CppNoob
la source
1
C'est la bonne réponse. Vous pouvez également obtenir des informations sur le processeur sous Process. Cliquez sur Process, puis sélectionnez votre application (Firefox dans votre exemple) sous les instances de l'objet sélectionné.
Chris McCowan
11

peut-être que vous pouvez l'utiliser. Cela devrait fonctionner pour vous et rapportera le temps processeur pour le processus spécifié.

@echo off
: Rich Kreider <[email protected]>
: 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.
Rich Kreider
la source
7

Je suis d'accord, perfmon.exe vous permet d'ajouter des compteurs (clic droit sur le panneau de droite) pour tout processus que vous souhaitez surveiller.

Objet de performance: Vérifiez le processus "Sélectionnez les instances dans la liste" et sélectionnez Firefox.

Ady Romantika
la source
1
Merci. Comment voir l'historique de l'utilisation du processeur sur une durée prédéfinie, comme une heure?
Eli Bendersky le
6

WMI est Windows Management Instrumentation, et il est intégré à toutes les versions récentes de Windows. Il vous permet de suivre par programme des éléments tels que l'utilisation du processeur, les E / S disque et l'utilisation de la mémoire.

Perfmon.exe est une interface graphique pour cette interface et peut surveiller un processus, écrire des informations dans un journal et vous permettre d'analyser le journal après coup. Ce n'est pas le programme le plus élégant au monde, mais il fait le travail.

doflynn
la source
5
Techniquement, perfmon est une interface avec l'API Windows Performance Counter sous-jacente qui est antérieure à WMI de nombreuses années. WMI expose également l'API du compteur de performances dans son espace de noms.
Rob Walker
2

Process Lasso est davantage conçu pour l'automatisation des processus et l'optimisation des classes de priorité, pas pour les graphiques. Cela dit, il fait l' utilisation du processeur offre par processus historique (comme une ligne tracée blanche sur le graphique) , mais il ne pas offrir l' histoire de l' utilisation de la mémoire par processus.

AVERTISSEMENT: Je suis l'auteur de Process Lasso, mais je ne l'approuve pas réellement ici - car il existe de meilleures solutions (perfmon étant la meilleure).

La meilleure chose qui soit est Windows Vista + Resource and Performance Monitor. Il peut suivre l'utilisation des accès au processeur, à la mémoire, au réseau et au disque par les processus au fil du temps. C'est un excellent utilitaire d'information système global qui aurait dû être créé il y a longtemps. Sauf erreur de ma part, il peut suivre l'utilisation du processeur et de la mémoire par processus au fil du temps (parmi les autres éléments répertoriés).

Dyasta
la source
2

Vous pouvez également essayer d'utiliser un script C # / Perl / Java pour obtenir les données d'utilisation à l'aide des commandes WMI, et voici les étapes à suivre.

Nous devons exécuter 2 requêtes de sélection WMI et appliquer la formule d'utilisation du% du processeur

1. Pour récupérer le nombre total de processus logiques

select NumberOfLogicalProcessors from Win32_ComputerSystem

2. Pour récupérer les valeurs de PercentProcessorTime, TimeStamp_Sys100NS (la formule d'utilisation du processeur a été appliquée, obtenez le pourcentage d'utilisation réel) et WorkingSetPrivate (RAM) au moins 2 fois avec un intervalle de veille de 1 seconde

select * from Win32_PerfRawData_PerfProc_Process where IDProcess=1234

3. Appliquer la formule d'utilisation du pourcentage du processeur

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

p2 indique PercentProcessorTime récupéré pour la deuxième fois, et p1 indique PercentProcessorTime récupéré pour la première fois, t2 et t1 est pour TimeStamp_Sys100NS.

Un exemple de code Perl pour cela peut être trouvé dans le lien http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/

Cette logique s'applique à tous les langages de programmation prenant en charge les requêtes WMI

Kaarthikeyan
la source
WMI et Powershell?
PreguntonCojoneroCabrón
2

Bien que je n'ai pas essayé cela, ProcDump semble être une meilleure solution.

Description du site:

ProcDump est un utilitaire de ligne de commande dont le but principal est de surveiller une application pour les pics de processeur et de générer des vidages sur incident pendant un pic qu'un administrateur ou un développeur peut utiliser pour déterminer la cause du pic. ProcDump inclut également la surveillance des fenêtres bloquées (en utilisant la même définition de blocage de fenêtre que Windows et le Gestionnaire des tâches utilisent), la surveillance des exceptions non gérées et peut générer des vidages en fonction des valeurs des compteurs de performances du système. Il peut également servir d'utilitaire de vidage de processus général que vous pouvez intégrer dans d'autres scripts.

sean
la source
1

Hmm, je vois que Process Explorer peut le faire, bien que ses graphiques ne soient pas trop pratiques. Toujours à la recherche de moyens alternatifs / meilleurs pour le faire.

Eli Bendersky
la source
1

Perfmon.exe est intégré à Windows.

Développeur SaaS
la source
1

Vous voudrez peut-être jeter un œil à Process Lasso .


la source
1

Sous Windows 10, le Gestionnaire des tâches peut vous montrer les heures de processeur cumulées. Dirigez-vous simplement vers l'onglet "Historique des applications" et "Supprimer l'historique d'utilisation". Maintenant, laissez les choses fonctionner pendant une heure ou deux:

Temps processeur cumulé sous Windows 10

Ce que cela ne fait PAS, c'est répartir l'utilisation dans les navigateurs par onglet. Les onglets assez souvent inactifs feront un travail énorme, chaque onglet ouvert utilisant de l'énergie et ralentissant votre PC.

Bryce
la source
1

Il était nécessaire d'obtenir l'état et l'utilisation du processeur / mémoire de certains serveurs Windows spécifiques. J'ai utilisé le script ci-dessous:

Ceci est un exemple de service de recherche 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
  }
Prosenjit Sen
la source
0

J'utilise taskinfo pour le graphique historique de la vitesse CPU / RAM / IO. http://www.iarsn.com/taskinfo.html

Mais les rafales de non-réponse ressemblent plus à un temps d'interruption dû à un lecteur HD / SS falty.

Terrik
la source