Existe-t-il un moyen de mesurer l'utilisation d'un processeur par processus?
Je sais que haut est utile pour mesurer l'utilisation du processeur du système entier par cœurs et taskset peut fournir des informations sur le type de processeur autorisé pour le processus.
Mais comment mesurer l'utilisation du processeur d'un processus spécifique par les cœurs de processeur?
Vous pouvez toujours le faire dans top. Pendant que haut est en cours d'exécution, appuyez sur la touche "1" de votre clavier pour afficher l'utilisation du processeur par cœur.
Limitez les processus indiqués en exécutant ce processus spécifique sous un compte utilisateur spécifique et utilisez le type 'u' pour limiter cet utilisateur.
Vous pouvez utiliser:
mpstat -P ALL 1
Il montre combien chaque cœur est occupé et il se met à jour automatiquement chaque seconde. La sortie ressemblerait à ceci (sur un processeur quad-core):
10:54:41 PM CPU %usr %Nice %sys %iowait %irq %soft %steal %guest %idle
10:54:42 PM all 8.20 0.12 0.75 0.00 0.00 0.00 0.00 0.00 90.93
10:54:42 PM 0 24.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 74.00
10:54:42 PM 1 22.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 76.00
10:54:42 PM 2 2.02 1.01 0.00 0.00 0.00 0.00 0.00 0.00 96.97
10:54:42 PM 3 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
10:54:42 PM 4 14.15 0.00 1.89 0.00 0.00 0.00 0.00 0.00 83.96
10:54:42 PM 5 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
10:54:42 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
10:54:42 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Cette commande ne répond pas à la question initiale, c’est-à-dire qu’elle ne montre pas l’utilisation du cœur de la CPU pour un processus spécifique.
vous pouvez utiliser ps
.
par exemple. ayant python processus avec deux threads occupés sur le processeur double cœur:
$ ps -p 29492 -L -o pid,tid,psr,pcpu
PID TID PSR %CPU
29492 29492 1 0.0
29492 29493 1 48.7
29492 29494 1 51.9
(PSR est l'identifiant de la CPU auquel le thread est actuellement assigné)
vous voyez que les threads s'exécutent sur le même noyau de processeur (à cause de GIL)
en exécutant le même python en jython, nous voyons que le script utilise les deux cœurs (et il existe de nombreux autres services ou threads, quasiment inactifs):
$ ps -p 28671 -L -o pid,tid,psr,pcpu
PID TID PSR %CPU
28671 28671 1 0.0
28671 28672 0 4.4
28671 28673 0 0.6
28671 28674 0 0.5
28671 28675 0 2.3
28671 28676 0 0.0
28671 28677 1 0.0
28671 28678 1 0.0
28671 28679 0 4.6
28671 28680 0 4.4
28671 28681 1 0.0
28671 28682 1 0.0
28671 28721 1 0.0
28671 28729 0 88.6
28671 28730 1 88.5
vous pouvez traiter la sortie et calculer le nombre total de processeurs pour chaque cœur de processeur.
Malheureusement, cette approche ne semble pas fiable à 100%. Parfois, je vois que dans le premier cas, les deux threads de travail sont signalés comme étant séparés vers chaque cœur de CPU, ou dans le dernier cas, les deux threads sont signalés comme étant actifs. le même noyau ..
htop
donne un bon aperçu de l'utilisation de base individuelle
La solution ps
correspondait à peu près à ce dont j'avais besoin et, avec quelques modifications, elle répond exactement à la question initiale: pour visualiser l'utilisation par cœur de processus spécifiques
Cela montre également l'utilisation par cœur de multi-threaded processus.
Utilisez comme: cpustat `pgrep nom_processus`` pgrep nom_processus` ...
#!/bin/bash
pids=()
while [ $# != 0 ]; do
pids=("${pids[@]}" "$1")
shift
done
if [ -z "${pids[0]}" ]; then
echo "Usage: $0 <pid1> [pid2] ..."
exit 1
fi
for pid in "${pids[@]}"; do
if [ ! -e /proc/$pid ]; then
echo "Error: pid $pid doesn't exist"
exit 1
fi
done
while [ true ]; do
echo -e "\033[H\033[J"
for pid in "${pids[@]}"; do
ps -p $pid -L -o pid,tid,psr,pcpu,comm=
done
sleep 1
done
Remarque: Ces statistiques sont basées sur le processus de la durée de vie , pas la dernière [~ # ~] x [~ # ~ ] secondes, vous devrez donc redémarrer votre processus pour réinitialiser le compteur.
dstat -C 0,1,2,3
Vous donnera également l'utilisation du processeur des 4 premiers cœurs. Bien sûr, si vous avez 32 cœurs, cette commande sera un peu plus longue mais utile si vous ne vous intéressez qu'à quelques cœurs.
Par exemple, si vous ne vous intéressez qu'aux noyaux 3 et 7, vous pourriez faire
dstat -C 3,7
J'ai pensé perf stat
est ce dont vous avez besoin.
Il montre l'utilisation spécifique d'un processus lorsque vous spécifiez un --cpu=list
option. Voici un exemple de surveillance de l’utilisation par le processeur de la construction d’un projet avec perf stat --cpu=0-7 --no-aggr -- make all -j
commande. La sortie est:
CPU0 119254.719293 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU1 119254.724776 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU2 119254.724179 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU3 119254.720833 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU4 119254.714109 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU5 119254.727721 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU6 119254.723447 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU7 119254.722418 task-clock (msec) # 1.000 CPUs utilized (100.00%)
CPU0 8,108 context-switches # 0.068 K/sec (100.00%)
CPU1 26,494 context-switches (100.00%)
CPU2 10,193 context-switches (100.00%)
CPU3 12,298 context-switches (100.00%)
CPU4 16,179 context-switches (100.00%)
CPU5 57,389 context-switches (100.00%)
CPU6 8,485 context-switches (100.00%)
CPU7 10,845 context-switches (100.00%)
CPU0 167 cpu-migrations # 0.001 K/sec (100.00%)
CPU1 80 cpu-migrations (100.00%)
CPU2 165 cpu-migrations (100.00%)
CPU3 139 cpu-migrations (100.00%)
CPU4 136 cpu-migrations (100.00%)
CPU5 175 cpu-migrations (100.00%)
CPU6 256 cpu-migrations (100.00%)
CPU7 195 cpu-migrations (100.00%)
La colonne de gauche est l'index spécifique du processeur et la colonne de droite, son utilisation. Si vous ne spécifiez pas le --no-aggr
_ option, le résultat sera agrégé. Le --pid=pid
option vous aidera si vous souhaitez surveiller un processus en cours d'exécution.
Essayez -a --per-core
ou -a perf-socket
aussi, qui présentera des informations plus classifiées.
En savoir plus sur l'utilisation de perf stat
peut être vu dans ce tutoriel: statistique du processeur , ainsi que perf help stat
aidera à comprendre le sens des options.
J'ai juste eu ce problème et j'ai trouvé une réponse similaire ici .
La méthode consiste à définir top
comme vous le souhaitez, puis à appuyer sur W
(majuscule W). Ceci enregistre la disposition actuelle de top
dans un fichier de configuration dans $ HOME/.toprc
Bien que cela puisse ne pas fonctionner si vous voulez exécuter plusieurs top
avec des configurations différentes.
Donc, via ce que je considère comme un moyen de contourner le problème, vous pouvez écrire dans différents fichiers de configuration/utiliser différents fichiers de configuration en effectuant l'une des opérations suivantes ...
1) renommer le binaire
ln -s /usr/bin/top top2
./top2
Maintenant .top2rc
va être écrit dans votre $ HOME
2) Définissez $ HOME sur un autre chemin, car il écrira son fichier de configuration dans le fichier $ HOME/.binary-name.rc
HOME=./
top
Maintenant .toprc
va être écrit dans le dossier actuel.
En utilisant les commentaires des autres peuples pour ajouter la comptabilité d'utilisation en haut, vous pouvez créer une sortie par lots pour cette information et cette dernière fusionne les informations via un script. Ce n’est peut-être pas aussi simple que votre script, mais j’ai trouvé top pour me fournir TOUS les processus afin que je puisse plus tard récapituler et capturer un état pendant une longue période que j’aurais peut-être manquée (utilisation soudaine du CPU inexpliquée à cause de processus errants)