Gibt es einen Befehl wie time, aber für die Speichernutzung?
Gibt es einen Befehl wie time
, aber das meldet mehr Statistiken? Es wäre großartig, wenn ich etwas tun könnte wie:
$ 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 starre ich zum Debuggen entweder aufmerksam auf top
(eigentlich glances
) oder streue Anweisungen durch meinen gesamten Code.
Wenn es etwas gäbe, an das ich einen Befehl übergeben könnte, wäre das fantastisch.
BEARBEITEN
Ich könnte ein lösung: perf
im Paket linux-tools
und linux-tools-common
unter 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
3 answers
zsh
verfügt über einen leistungsfähigeren integrierten Befehl time
als bash
, und die Version zsh
kann Speicherstatistiken melden.
Selbst wenn Sie zsh
nicht regelmäßig als tägliche Shell verwenden, können Sie es einfach ausführen, wenn Sie diese Art von Statistiken sammeln müssen.
Legen Sie die Umgebungsvariable TIMEFMT
fest, um die gewünschte Ausgabe anzugeben. Hier ist, was ich in meiner .zshrc
Datei habe (vielleicht ein bisschen zu schick, aber ich mag es):
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'
(Ein kompliziertes Detail: Unter Linux ist der maximale Speicher Megabyte; auf macOS ist es in Kilobyte. Um den Wert für %M
abzurufen, ruft zsh getrusage()
auf und verwendet dannru_maxrss / 1024
. aber unter Linux ist ru_maxrss
in Kilobyte und auf dem Mac in Bytes. Siehe man getrusage
, auf beiden Plattformen.)
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: 3 MB
page faults from disk: 0
other page faults: 337
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-07-10 02:43:09
GNU time kann etwas mehr Informationen melden als die in Bash integrierte Version; Verwenden Sie command time
anstatt nur time
, um es aufzurufen, und sehen Sie sich die Manpage oder Informationen für Details an.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-09-29 10:30:55
Basierend auf Richards Antwort können Sie einen Alias erstellen, um GNU time zu verwenden und durchschnittliche und maximale Speicherinformationen bereitzustellen:
alias time="$(which time) -f '\t%E real,\t%U user,\t%S sys,\t%K amem,\t%M mmem'"
Oder passen Sie Ihre Umgebung an:
export TIME='\t%E real,\t%U user,\t%S sys,\t%K amem,\t%M mmem'
Beachten Sie jedoch, dass dies nur für /usr/bin/time
funktioniert, das häufig nicht standardmäßig aufgerufen wird.
Von der Manpage:
K Durchschnittliche Gesamtspeichernutzung (Daten+Stapel+Text) des Prozesses, in Kilobyte.
M Maximale resident set größe des prozesses während seiner Lebenszeit, in Kilobyte.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-12 13:48:39