Comment voir combien de changements de contexte un processus fait?
25
Je veux voir si mon processus fait beaucoup de changements de contexte. Je veux également voir comment la manipulation des groupes de tâches affecte le nombre de changements de contexte.
J'ai essayé la commande watch ci-dessus mais la sortie est juste 1 (pour le changement de contexte volontaire et involontaire). Ma version Linux noyau est 2.6.39-400.214.4.el6uek.x86_64. La sortie dépend-elle de la version linux?
Andy Dufresne
Collez votre sortie ici s'il vous plaît.
C'est le même que celui mentionné dans la réponse - "watch -n.5 grep ctxt / proc / 5647 / status"
Andy Dufresne
Je dois utiliser procfs mais sur les anciens noyaux, il n'y a pas de valeurs dans /proc/.../status. toute suggestion ?
Massimo
12
pidstat (1) - Rapporte les statistiques des tâches Linux. Selon man pidstatc'est si facile que justepidstat -w …
J'ai exécuté la commande "watch -n0.5 pidstat -w -I -p 5876" mais la sortie est 0 (pour les deux cswch / s nvcswch / s). Cette commande fonctionne-t-elle pour la version linux - 2.6.39-400.214.4.el6uek.x86_64?
Andy Dufresne
Cette commande devrait très bien fonctionner. Mais méfiez - vous que vous utilisez mal parce que quand vous ne spécifiez pas l' intervalle de rapport « statistiques des tâches doivent être rapportées pour le temps écoulé depuis le démarrage du système (démarrage). » Semblable à vmstat, iostatet d' autres. Donc, si des statistiques actuelles sont nécessaires au lieu de watchsimplement les exécuter avec un intervalle d'une seconde.
poige
Si je ne regarde pas, comment puis-je voir les numéros se mettre à jour en continu? En exécutant la commande "pidstat -w -I -p 5876 5", la commande attend juste 5 secondes, puis imprime la sortie (à nouveau sous la forme 0). Il ne fonctionne pas en continu comme je m'y attendais (je sais que cela contredit ce que dit la page de manuel de pidstat - linux.die.net/man/1/pidstat ). Mon système d'exploitation est Oracle Linux Server 6.4.
Andy Dufresne
`Pidstat -w -l -p SELF 1` fonctionne-t-il pour vous?
poige
4
Pour obtenir un enregistrement de l'exécution d'un processus entier, vous pouvez utiliser l' timeutilitaire GNU (ne le confondez pas avec le programme bashintégré) avec l' -voption. Voici un exemple avec des lignes de sortie non liées supprimées:
$ `which time`-v ls
a.out exception_finder.cpp log.txt
Command being timed:"ls"...Voluntary context switches:1Involuntary context switches:2...Exit status:0
Vous pouvez utiliser sar -w,. Par exemple, sar -w 1 3signale un nombre total de changements de contexte par seconde pour chaque 1 seconde au total 3 fois.
Cela ne fonctionne pas "prêt à l'emploi" sur de nombreux systèmes, même si la commande est disponible. Pouvez-vous inclure dans votre réponse comment activer la collecte de données sar?
Anthon
2
Écrivez le script suivant dans file ( ctx.sh). avec ctx.sh <core>vous verrez tous les processus en cours d'exécution sur un noyau donné et la modification des commutateurs de contexte nv sera mise en évidence. En regardant cela, vous serez en mesure d'identifier quels sont les processus concurrents pour le noyau.
Voir man getrusage qui vous permettra d'interroger le nombre de changements de contexte volontaires et involontaires.
struct rusage {
struct timeval ru_utime;/* user CPU time used */
struct timeval ru_stime;/* system CPU time used */
long ru_maxrss;/* maximum resident set size */
long ru_ixrss;/* integral shared memory size */
long ru_idrss;/* integral unshared data size */
long ru_isrss;/* integral unshared stack size */
long ru_minflt;/* page reclaims (soft page faults)*/
long ru_majflt;/* page faults (hard page faults)*/
long ru_nswap;/* swaps */
long ru_inblock;/* block input operations */
long ru_oublock;/* block output operations */
long ru_msgsnd;/* IPC messages sent */
long ru_msgrcv;/* IPC messages received */
long ru_nsignals;/* signals received */
long ru_nvcsw;/* voluntary context switches */
long ru_nivcsw;/* involuntary context switches */};
Vous pouvez lui indiquer de rapporter des informations par thread, comme ceci:
/proc/[pid]/status
Réponses:
Vous pouvez afficher des informations sur les changements de contexte de votre processus dans
/proc/<pid>/status
.Pour voir ces chiffres se mettre à jour en continu, exécutez
Pour obtenir uniquement les chiffres, exécutez
la source
pidstat (1) - Rapporte les statistiques des tâches Linux. Selon
man pidstat
c'est si facile que justepidstat -w …
la source
vmstat
,iostat
et d' autres. Donc, si des statistiques actuelles sont nécessaires au lieu dewatch
simplement les exécuter avec un intervalle d'une seconde.Pour obtenir un enregistrement de l'exécution d'un processus entier, vous pouvez utiliser l'
time
utilitaire GNU (ne le confondez pas avec le programmebash
intégré) avec l'-v
option. Voici un exemple avec des lignes de sortie non liées supprimées:la source
Vous pouvez utiliser
sar -w
,. Par exemple,sar -w 1 3
signale un nombre total de changements de contexte par seconde pour chaque 1 seconde au total 3 fois.la source
sar
?Écrivez le script suivant dans file (
ctx.sh
). avecctx.sh <core>
vous verrez tous les processus en cours d'exécution sur un noyau donné et la modification des commutateurs de contexte nv sera mise en évidence. En regardant cela, vous serez en mesure d'identifier quels sont les processus concurrents pour le noyau.la source
Voir man getrusage qui vous permettra d'interroger le nombre de changements de contexte volontaires et involontaires.
Vous pouvez lui indiquer de rapporter des informations par thread, comme ceci:
Appelez-le simplement deux fois, avant et après votre section critique, et voyez si la valeur usage.ru_nivcsw a augmenté ou non.
la source
la source