Gibt es einen Befehl wie die Zeit, aber für den Speicherbedarf?

9351
Peter

Gibt es einen Befehl wie time, aber das berichtet mehr Statistiken? Es wäre toll, wenn ich so etwas tun könnte:

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

Wenn es noch weiter gehen könnte, wäre das großartig. Im Moment stelle ich mich zum Debuggen entweder an top(eigentlich glances) oder streue Anweisungen in meinem Code.

Wenn es etwas gab, an das ich einen Befehl übergeben könnte, wäre das fantastisch.

BEARBEITEN

Ich habe vielleicht eine Lösung gefunden: perfim Paket linux-toolsund linux-tools-commonauf 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 

( Die Seite, die geholfen hat. )

26
In Ihren `perf`-Ergebnissen gibt es keine Speicherstatistik. BatchyX vor 11 Jahren 3
"Wie die Zeit, aber für die Erinnerung" macht eigentlich keinen Sinn. Was willst du genau wissen? Gedächtnis ist keine Messung. Der Hochstapler vor 11 Jahren 0
Möchten Sie eine Anwendung prüfen, die Sie erstellen? Wenn ja, in welcher Sprache? dset0x vor 11 Jahren 1

3 Antworten auf die Frage

21
Mike Morearty

zshhat einen leistungsfähigeren timeBefehl als bashzuvor, und die zshVersion kann Speicherstatistiken melden.

Selbst wenn Sie nicht regelmäßig zshals Shell für den täglichen Gebrauch verwendet werden, können Sie sie einfach ausführen, wenn Sie diese Art von Statistiken benötigen.

Legen Sie die TIMEFMTUmgebungsvariable fest, um die gewünschte Ausgabe anzugeben. Folgendes habe ich in meiner .zshrcDatei (vielleicht etwas zu schick, aber ich mag es):

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 MB'$'\n'\ 'page faults from disk: %F'$'\n'\ 'other page faults: %R' 

Beispielausgabe:

% 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: 668 MB page faults from disk: 0 other page faults: 337 
Ihre Antwort hat mir sehr geholfen, aber ich habe eine Frage: Ist 'max memory' in MB? Ich glaube es ist KB oder sogar B. Andres vor 8 Jahren 0
Schön, dass es geholfen hat, @Andres. In meinen Tests ist 'max memory' in MB, Sie können es jedoch selbst testen, indem Sie https://gist.github.com/mmorearty/fa34c0f29abe454fd14b kompilieren und in zsh mit "time malloc-bytes 10000000" ausführen. Das wird malloc 10 Megabyte sein, also probieren Sie es aus und sehen Sie dann, was zsh meldet. Mike Morearty vor 8 Jahren 0
Laut [den zsh-Dokumenten] (http://zsh.sourceforge.net/Doc/Release/Parameters.html) ist% M die maximale Speicherkapazität in Megabyte. gerrard00 vor 7 Jahren 0
14
Richard Kettlewell

Die GNU-Zeit kann etwas mehr Informationen melden als die in Bash integrierte Version. Verwenden Sie sie, command timeanstatt sie nur timeaufzurufen, und lesen Sie die Manpage oder die Informationen, um Details zu erfahren.

Oder rufen Sie `/ usr / bin / time -v. / My_command.sh` an ostrokach vor 6 Jahren 1
2
Dej

Based on Richard's answer, you can create an alias to use GNU time and provide average and maximum memory information:

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

or adjust your environment:

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

But be aware that this only works for /usr/bin/time which is often not called by default.

From the man page:

K Average total (data+stack+text) memory use of the process, in Kilobytes.

M Maximum resident set size of the process during its lifetime, in Kilobytes.