54 votes

Existe-t-il une commande comme time, mais pour l'utilisation de la mémoire ?

Existe-t-il une commande comme time mais qui rapporte plus de statistiques ? Ce serait génial si je pouvais faire quelque chose comme :

$ statistics some_command
time:
    real    0m3.002s
    user    0m0.000s
    sys     0m0.000s
memory:
    min     41K
    peak    2.5M
    mean    1.1M
. . .

Si cela pouvait aller encore plus loin, ce serait formidable. Pour l'instant, pour le débogage, je finis soit par regarder attentivement top (en fait glances ), ou en saupoudrant des déclarations tout au long de mon code.

S'il y avait quelque chose à qui je pouvais passer une commande, ce serait fantastique.

EDITAR

J'ai peut-être trouvé une solution : perf dans le paquet linux-tools y linux-tools-common sur Ubuntu 12.04.

$ perf stat ./someprocess
Performance counter stats for './someprocess':

      12007.384578 task-clock                #    0.996 CPUs utilized          
             1,092 context-switches          #    0.000 M/sec                  
                16 CPU-migrations            #    0.000 M/sec                  
           295,102 page-faults               #    0.025 M/sec                  
    40,553,682,299 cycles                    #    3.377 GHz                     [83.33%]
    18,400,458,723 stalled-cycles-frontend   #   45.37% frontend cycles idle    [83.35%]
     8,356,832,355 stalled-cycles-backend    #   20.61% backend  cycles idle    [66.64%]
    56,930,684,595 instructions              #    1.40  insns per cycle        
                                             #    0.32  stalled cycles per insn [83.34%]
     9,083,443,825 branches                  #  756.488 M/sec                   [83.35%]
         3,431,737 branch-misses             #    0.04% of all branches         [83.33%]

      12.051963969 seconds time elapsed

( La page qui a aidé. )

39voto

Mike Morearty Points 773

zsh a une fonction intégrée plus puissante time que bash a, et le zsh peut établir des statistiques sur la mémoire.

Même si vous n'utilisez pas régulièrement zsh comme votre Shell quotidien, vous pouvez simplement l'exécuter lorsque vous avez besoin de rassembler ce genre de statistiques.

Définissez le TIMEFMT pour indiquer la sortie que vous souhaitez. Voici ce que j'ai dans mon .zshrc (peut-être un peu trop fantaisiste, mais j'aime ça) :

if [[ `uname` == Darwin ]]; then
    MAX_MEMORY_UNITS=KB
else
    MAX_MEMORY_UNITS=MB
fi

TIMEFMT='%J   %U  user %S system %P cpu %*E total'$'\n'\
'avg shared (code):         %X KB'$'\n'\
'avg unshared (data/stack): %D KB'$'\n'\
'total (sum):               %K KB'$'\n'\
'max memory:                %M '$MAX_MEMORY_UNITS''$'\n'\
'page faults from disk:     %F'$'\n'\
'other page faults:         %R'

(Un détail compliqué : Sous Linux, la mémoire maximale est exprimée en mégaoctets ; sous macOS, elle est exprimée en kilooctets. Pour obtenir la valeur de %M appels zsh getrusage() et utilise ensuite ru_maxrss / 1024 . mais sur Linux, ru_maxrss est en kilo-octets, et sur Mac c'est en octets. Voir man getrusage sur les deux plateformes).

Exemple de sortie :

% time ls
[... the output of ls, followed by:]
ls -G   0.00s  user 0.00s system 91% cpu 0.004 total
avg shared (code):         0 KB
avg unshared (data/stack): 0 KB
total (sum):               0 KB
max memory:                3 MB
page faults from disk:     0
other page faults:         337

21voto

Temps GNU peut rapporter un peu plus d'informations que la version intégrée à Bash ; utilisez command time plutôt que de simplement time pour l'invoquer, et consultez la page de manuel ou info pour plus de détails.

5voto

Dej Points 153

En vous basant sur la réponse de Richard, vous pouvez créer un alias pour utiliser GNU time et fournir des informations sur la mémoire moyenne et maximale :

alias time="$(which time) -f '\t%E real,\t%U user,\t%S sys,\t%K amem,\t%M mmem'"

ou ajuster votre environnement :

export TIME='\t%E real,\t%U user,\t%S sys,\t%K amem,\t%M mmem'

Mais attention, cela ne fonctionne que pour /usr/bin/time qui n'est souvent pas appelé par défaut.

De la page de manuel :

K Utilisation totale moyenne de la mémoire (données+pile+texte) du processus, en K Kilo-octets.

M Taille maximale de l'ensemble des résidents du processus pendant sa durée de vie. vie, en kilo-octets.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X