time
to genialne polecenie, jeśli chcesz dowiedzieć się, ile czasu zajmuje procesor.
Szukam czegoś podobnego, co może zmierzyć maksymalne użycie pamięci RAM programu i wszystkich dzieci. Najlepiej, aby odróżniał przydzieloną pamięć, która była używana i nieużywana. Być może może to nawet dać medianę użycia pamięci (więc użycia pamięci należy się spodziewać podczas długotrwałego działania).
Więc chciałbym zrobić:
rammeassure my_program my_args
i uzyskaj dane wyjściowe podobne do:
Max memory allocated: 10233303 Bytes
Max memory used: 7233303 Bytes
Median memory allocation: 5233303 Bytes
Patrzyłem na memusg
https://gist.github.com/526585/590293d6527c91e48fcb08edb8de9fd6c88a6d82, ale uważam to za nieco włamanie.
./tstime -t bash -c 'perl -e "\$a=\"x\"x100000000;\$b=\$a.\$a;\$b=\"\";\$a=\"\";sleep 10;"'
glibc
(i inne różne biblioteki, dla niektórych nazywane są „współdzielonymi”). Wiele demonów ładuje konfigurację do pamięci i dzieci podnośnika (2), które następnie współużytkują dane konfiguracji. Następnie są dane w buforach readahead / writebehind zarządzanych przez jądro. A potem są usługi, które są stadem luźno powiązanych procesów (pomyśl o środowisku pulpitu i wszystkich jego apletach i innych elementach).time
jest wbudowany w twoją powłokę. Jeśli chcesz,time
ale potrzebujesz więcej informacji, wypróbuj GNUtime
w-v
trybie verbose ( ):Wyszukaj w menedżerze pakietów „czas” lub „gnutime”.
źródło
wait3
Wypełnia strukturę opisaną wgetrusage(2)
: „Nie wszystkie pola mają znaczenie w Linuksie. [..] ”.tstime
raportuje 10652 KiB. Ponownie pod Ubuntu 10.04./usr/bin/time -v perl -e '$a="x"x100000000;$b=$a.$a;sleep 10;'
. góra mówi, że zajmuje to około 570 MB, ale czas mówi 2,3 GB. W praktyce liczba ta nie jest dla mnie możliwa.Może przesada, ale właśnie znalazłem
valgrind
fajne narzędzie o nazwiemassif
. Testowałem naxterm
:Otrzymujesz ładny wykres wykorzystania pamięci:
wraz ze zbyt szczegółowymi informacjami o zużyciu pamięci. Szczegóły w instrukcji Valgrind .
Programy będą działać około 20 razy wolniej. Uruchomiłem też kilka poleceń wewnątrz
xterm
. Ich pamięć została uwzględniona, ponieważ--trace-children=yes
istnieje taka opcja!źródło
Chociaż temat jest dość stary, chcę udostępnić inny projekt, który powstał z funkcji jądra Linuksa cgroups.
https://github.com/gsauthof/cgmemtime :
źródło
Wygląda na to, że tstime już nie działa w systemie innym niż root w systemie Linux> = 3.0. Oto narzędzie do sondowania, które napisałem, aby włamać się do tego problemu: https://github.com/jhclark/memusg/blob/master/memusg
źródło
/usr/bin/time -v
daje poprawne wyjście w nowszych wersjach. W starszych wersjach wystarczy podzielić przez 4, aby uzyskać prawidłową kwotę.