Comment déterminer la consommation de CPU et de mémoire à l'intérieur d'un processus?
Une fois, j'ai eu la tâche de déterminer les paramètres de performance suivants à partir de l'intérieur d'une application en cours d'exécution:
- Total de la mémoire virtuelle disponible
- De mémoire virtuelle utilisée actuellement
- De mémoire virtuelle utilisée actuellement par mon processus
- Total de mémoire vive disponible
- RAM actuellement utilisé
- RAM actuellement utilisé par mon processus
- % De CPU utilisé actuellement
- % De CPU utilisé actuellement par mon processus
Le code doit s'exécuter sur Windows et Linux. Même si cela semble être une tâche standard, trouver l'information nécessaire dans les manuels (API WIN32, GNU docs) ainsi que sur l'Internet m'a pris plusieurs jours, parce qu'il ya tellement incomplète ou erronée ou obsolète de l'information sur ce sujet pour être trouvé là-bas.
Afin de sauver les autres de passer par le même problème, j'ai pensé qu'il serait une bonne idée de collecter toutes les informations éparses, plus ce que j'ai trouvé par essai et erreur ici en un seul endroit.
source d'informationauteur Lanzelot
Vous devez vous connecter pour publier un commentaire.
Mac OS X
J'espérais trouver des informations similaires pour Mac OS X ainsi. Puisqu'il n'était pas là, je suis sorti et ai creusé moi-même. Voici certaines des choses que j'ai trouvé. Si quelqu'un a d'autres suggestions, je serais ravi de les entendre.
Mémoire Virtuelle Totale
Celui-ci est délicate sur Mac OS X, car il n'est pas utiliser un préréglage de la partition de swap ou d'un fichier comme Linux. Voici une entrée à partir de la documentation d'Apple:
Donc, si vous voulez savoir combien de mémoire virtuelle est toujours disponible, vous devez obtenir la taille de la partition racine. Vous pouvez le faire comme ceci:
Virtuelle Totale Actuellement Utilisé
Appel systcl avec la "machine virtuelle.swapusage" clé fournit des informations intéressantes sur l'utilisation de la swap:
Pas que le total de pagination affiché ici peut changer si le swap est nécessaire, comme expliqué dans la section ci-dessus. Si le total est en réalité le actuel swap total. En C++, ces données peuvent être interrogées de cette façon:
Noter que le "xsw_usage", a déclaré dans sysctl.h, ne semble pas documentée et j'ai l'impression que il n'y a plus de portable moyen d'accéder à ces valeurs.
De Mémoire virtuelle Utilisée Actuellement par mon Processus
Vous pouvez obtenir des statistiques à propos de votre processus actuel à l'aide de la
task_info
fonction. Qui inclut l'actuel résident de la taille de votre processus et le virtuel en cours de taille.Total de mémoire vive disponible
La quantité de RAM physique disponible dans votre système est disponible en utilisant la
sysctl
système de fonction comme ceci:RAM Actuellement Utilisé
Vous pouvez obtenir de la mémoire générale des statistiques de la
host_statistics
la fonction du système.Une chose à noter ici sont qu'il y a cinq types de pages de mémoire dans Mac OS X. Ils sont comme suit:
Il est bon de noter que juste parce que Mac OS X peuvent montrer très peu de mémoire libre aux époques qu'il ne peut pas être une bonne indication de la façon dont une grande partie est prêt à être utilisé sur un court préavis.
RAM Actuellement Utilisé par mon Processus
Voir la "Mémoire Virtuelle Utilisée Actuellement par mon Processus" ci-dessus. Le même code s'applique.
dans windows, vous pouvez obtenir de l'utilisation du processeur par le code ci-dessous:
Linux
Façon portable de lecture de la mémoire et de la charge des nombres est l'
sysinfo
appelUtilisation
DESCRIPTION
J'ai utilisé le code suivant dans mon projet de C++ et il a bien fonctionné:
Pour Linux
Vous pouvez également utiliser /proc/self/statm afin d'obtenir une ligne de nombres contenant les principaux processus de la mémoire de l'information qui est plus rapide chose à traiter que de passer par une longue liste de cas déclarés de l'information que vous obtenez de proc/self/statut
Voir http://man7.org/linux/man-pages/man5/proc.5.html
Mac OS X PROCESSEUR -
Global d'utilisation de l'UC:
De Récupérer les informations système sur mac os X? :