J'ai plusieurs programmes que j'exécute dans un script shell:
./myprogram1
./myprogram2
...
Je sais que je peux profiler chaque programme individuel en éditant le code source, mais je voulais savoir s'il y avait un moyen de mesurer le temps total exécuté en profilant le script lui-même. Existe-t-il un programme de minuterie que je peux utiliser à cette fin? Si oui, quelle est sa précision?
Réponses:
Commencez par utiliser le temps selon la suggestion de Jon Lin:
Vous ne dites pas sur quel unix vos scripts fonctionnent, mais strace sous linux, truss sous Solaris / AIX, et je pense que tusc sur hp-ux vous permet d'en apprendre beaucoup sur ce que fait un processus. J'aime l'option -c de strace pour obtenir un joli résumé:
Notez également que la connexion de ces programmes de type traçage peut ralentir quelque peu le programme.
la source
Découvrez la
time
commande . Vous pouvez l'utiliser pour mesurer le temps nécessaire à l'exécution ainsi que d'autres informations utiles comme l'endroit où le temps est passé.la source
Ce n'est pas exactement du profilage, mais vous pouvez suivre votre script pendant son exécution. Mettez
set -xv
avant la section que vous souhaitez tracer etset +xv
après la section.set -x
active xtrace, qui affichera chaque ligne qui s'exécute.set -v
active le mode verbeux, qui montrera également les lignes qui peuvent avoir un effet, mais qui ne sont pas exécutées, comme l'affectation des variables.Vous pouvez également horodater votre trace. Vous avez besoin d'un émulateur de terminal qui peut horodater chaque ligne; le seul que je connaisse est RealTerm , qui est un programme Windows, mais il fonctionnera avec Wine. Vous pourriez également être en mesure d'utiliser
grabserial
, même si je ne l'ai pas essayé sauf avec de vrais ports série. Vous pouvez découvrir quel périphérique série votre shell utilise en exécutantps -p $$
(si ce n'est pas le cas, utilisezman
pour savoir comment inclure la colonne TTY dans votreps
sortie).Voir également Outils de profilage des performances pour les scripts shell sur Stack Overflow.
la source
time
pour plusieurs itérationsProfilage en exécutant plusieurs fois la même commande
Où
echo "scale=1000; 4*a(1)" | bc -l
calcule pi ettime (...)
garantit que lafor
boucle s'exécute comme une seule commande.la source
Depuis que je me suis retrouvé ici au moins deux fois maintenant, j'ai implémenté une solution:
https://github.com/walles/shellprof
Il exécute votre script, horloge de manière transparente toutes les lignes imprimées et à la fin imprime une liste des 10 premières lignes qui étaient à l'écran le plus longtemps:
la source