web-dev-qa-db-fra.com

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

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

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

Je cherche un outil prêt à l'emploi ou une méthode programmatique pour y parvenir.

147
Eli Bendersky

Tapez simplement perfmon dans Start > Run et appuyez sur entrée. Lorsque la fenêtre Performances 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 similarité en groupes appelés "Objet de performance".

Pour vos questions, vous pouvez choisir les objets de performance "Processus", "Mémoire" et "Processeur". 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érieurement. Pour ce faire, sélectionnez "Journaux et alertes de performance" dans le panneau de gauche. (C’est sous la console System Monitor qui nous fournit les compteurs mentionnés ci-dessus. Si ce n’est pas le cas, cliquez sur "Fichier"> "Ajouter/Supprimer un composant logiciel enfichable", cliquez sur Ajouter et sélectionnez "Journaux et alertes de performance" dans la liste. ".) Sous" Journaux et alertes de performance ", créez une nouvelle configuration de surveillance sous" Journaux des compteurs ". Vous pouvez ensuite ajouter les compteurs, spécifier le taux d'échantillonnage, le format du journal (texte binaire ou brut) et l'emplacement du journal.

156
Martin08

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

40
Niall

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

15
CppNoob

peut-être que vous pouvez utiliser cela. Cela devrait fonctionner pour vous et signaler le temps de 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.
10
Rich Kreider

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: Processus .__ Cochez la case "Sélectionner les instances dans la liste" et sélectionnez Firefox.

7
Ady Romantika

WMI est Windows Management Instrumentation et 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 du disque et l'utilisation de la mémoire.

Perfmon.exe est une interface graphique frontale de cette interface. Il peut surveiller un processus, écrire des informations dans un journal et vous permettre d'analyser le journal ultérieurement. Ce n'est pas le programme le plus élégant au monde, mais il fait le travail. 

6
doflynn

Process Lasso est davantage conçu pour l’automatisation des processus et l’optimisation des classes de priorité que pour les graphiques. Cela dit, ne propose un historique d'utilisation du processeur par processus (tracé blanc sur le graphique), mais il n'offre PAS un historique d'utilisation de la mémoire par processus. 

CLAUSE DE NON-RESPONSABILITÉ: Je suis l’auteur de Process Lasso, mais je ne l’approuve pas vraiment ici, car il existe de meilleures solutions (perfmon étant la meilleure).

La meilleure chose qui soit est l’analyseur de ressources et de performances de Windows Vista +. Il peut suivre l'utilisation des accès processeur, mémoire, réseau et disque par processus au fil du temps. C'est un excellent utilitaire global d'informations système qui aurait dû être créé depuis 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).

2
dyasta

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 détecter les pointes de processeur et de générer des vidages sur incident au cours d'une pointe qu'un administrateur ou un développeur peut utiliser pour déterminer la cause de cette pointe. ProcDump comprend également la surveillance des fenêtres bloquées (utilisant la même définition de la fenêtre bloquée que Windows et le gestionnaire de tâches), la surveillance des exceptions non gérées et peut générer des vidages basés sur les valeurs des compteurs de performance du système. Il peut également servir d'utilitaire de vidage de processus général que vous pouvez intégrer à d'autres scripts.

2
sean

Vous voudrez peut-être consulter Process Lasso .

1
maksa

Vous pouvez également essayer d'utiliser un script C #/Perl/Java pour obtenir les données d'utilisation à l'aide de commandes WMI. Vous trouverez ci-dessous les étapes à suivre.

Nous devons exécuter 2 requêtes de sélection WMI et appliquer la formule d'utilisation% 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 de l'UC 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 processeur

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

p2 a indiqué PercentProcessorTime extrait pour la deuxième fois, et p1 a indiqué que PercentProcessorTime était extrait pour la première fois, t2 et t1 étaient destinés à TimeStamp_Sys100NS.

Vous trouverez un exemple de code Perl 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.

1
Kaarthikeyan

Hmm, je vois que Process Explorer peut le faire, même si ses graphiques ne sont pas très pratiques. Je cherche toujours des solutions alternatives/meilleures pour le faire.

1
Eli Bendersky

Perfmon.exe est intégré à Windows.

1
SaaS Developer

Sous Windows 10, le gestionnaire de tâches peut vous montrer les heures de traitement cumulées. Il suffit de vous rendre dans l'onglet "Historique des applications" et "Supprimer l'historique d'utilisation". Maintenant, laissez les choses en cours pendant une heure ou deux:

 Windows 10 Cumulative CPU time

Ce que cela ne fait PAS, c'est de décomposer l'utilisation dans les navigateurs par onglet. Très souvent, les onglets inactifs feront énormément de travail, chaque onglet ouvert consomme de l’énergie et ralentit votre PC.

1
Bryce

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

Mais les rafales de non-réponse sonnent plus comme du temps d’interruption dû à un disque dur HD/SS. 

0
Terrik