Czy istnieje narzędzie, które uruchomi wiersz poleceń i zgłosi całkowite szczytowe użycie pamięci RAM?
Wyobrażam sobie coś analogicznego do / usr / bin / time
linux
command-line
memory-management
jes5199
źródło
źródło
[ Edytuj : Działa na Ubuntu 14.04:
/usr/bin/time -v command
Upewnij się, że używasz pełnej ścieżki.]Wygląda na to,
/usr/bin/time
że daje ci te informacje, jeśli zdasz-v
(dotyczy to Ubuntu 8.10). Zobacz np.Maximum resident set size
Poniżej:źródło
/bin/time -v
rozwiązuje to.time -l
na MacOS, daje podobne wyniki.(To już stare pytanie, na które odpowiedziano ... ale tylko dla przypomnienia :)
Zainspirował mnie scenariusz Yang i wymyśliłem to małe narzędzie o nazwie memusg . Po prostu zwiększyłem częstotliwość próbkowania do 0,1, aby obsłużyć znacznie krótsze procesy życiowe. Zamiast monitorować pojedynczy proces, postanowiłem zmierzyć sumę rss grupy procesów. (Tak, piszę wiele osobnych programów, które ze sobą współpracują) Obecnie działa na Mac OS X i Linux. Użycie musiało być podobne do
time
:Pokazuje tylko chwilową wartość szczytową, ale interesują mnie niewielkie rozszerzenia do rejestrowania innych (przybliżonych) statystyk.
Dobrze jest mieć takie proste narzędzie do obejrzenia przed rozpoczęciem poważnego profilowania.
źródło
ps -o rss=
gdzie rss to rzeczywisty rozmiar pamięci (zestaw rezydentny) procesu (w jednostkach 1024-bajtowych) z mojej strony podręcznika BSD.Valgrind one-liner:
valgrind --tool=massif --pages-as-heap=yes --massif-out-file=massif.out ./test.sh; grep mem_heap_B massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
Zwróć uwagę na użycie opcji --pages-as-heap do pomiaru całej pamięci w procesie. Więcej informacji tutaj: http://valgrind.org/docs/manual/ms-manual.html
źródło
time
, Zostawiam cię.valgrind --massif
. Można również użyćms_print
dołączonego narzędzia do poręcznego wydruku (w tym wykresów zużycia ascii w czasie)time
, zajmuje co najmniej 10 razy więcej czasu na polecenia takie jakls
.W systemie Linux:
Użyj
/usr/bin/time -v <program> <args>
i wyszukaj „ Maksymalny rozmiar zestawu rezydenta ”.(Nie mylić z Basha
time
wbudowanego polecenia! Więc używać pełnej ścieżki ,/usr/bin/time
)Na przykład:
Na BSD, MacOS:
Użyj
/usr/bin/time -l <program> <args>
, szukając „ maksymalnego rozmiaru zestawu rezydenta ”:źródło
sudo apt-get install time
Być może czas (gnu) (1) robi już to, co chcesz. Na przykład:
Ale inne narzędzia do profilowania mogą dawać dokładniejsze wyniki w zależności od tego, czego szukasz.
źródło
time
jest wbudowanym poleceniem podczas używaniacsh
. Jeśli użyjesz dokładnej ścieżki, pozwoli ci to uruchomić zewnętrzne polecenie. O ile mi wiadomo, tylko wersja GNU obsługuje opcję formatowania./ usr / bin / time może faktycznie robić to, co chcesz. Coś jak.
Zobacz czas (1), aby uzyskać szczegółowe informacje ...
źródło
W systemie MacOS Sierra użyj:
Możesz użyć,
grep
aby wziąć to, co chcesz.źródło
command time -l
zamiast tego/usr/bin/time -l
spowoduje, że twoja powłoka faktycznie wywoła binarne wywołanietime
zamiast wbudowanej funkcji. (Tak,command
nie jest symbolem zastępczym,command time
jest inny niż tylkotime
.)Jeśli proces działa przez co najmniej kilka sekund, możesz użyć następującego skryptu bash, który uruchomi podaną linię poleceń, a następnie wydrukuje, aby ustawić stderr szczytowego kanału RSS (zastąp
rss
dowolny inny atrybut, który Cię interesuje). Jest nieco lekki i działa dla mnie zps
zawartym w Ubuntu 9.04 (czego nie mogę powiedziećtime
).źródło
źródło
Cóż, jeśli naprawdę chcesz pokazać szczyt pamięci i bardziej szczegółowe statystyki, polecam użycie profilera, takiego jak valgrind . Ładnym frontgralem valgrind jest alleyoop .
źródło
Aby to zrobić, możesz użyć narzędzia takiego jak Valgrind .
źródło
Oto (w oparciu o inne odpowiedzi) bardzo prosty skrypt, który obserwuje już uruchomiony proces. Po prostu uruchom go z pid procesu, który chcesz obejrzeć jako argument:
Przykładowe użycie:
źródło
Użyj Massif: http://valgrind.org/docs/manual/ms-manual.html
źródło
Heaptrack to narzędzie KDE z interfejsem graficznym i graficznym. Uważam, że bardziej odpowiednie niż valgrind jest zrozumienie wykorzystania pamięci przez proces, ponieważ zapewnia on więcej szczegółów i flamegraph. Jest także szybszy, ponieważ mniej sprawdza sprawdzanie tego walgrinda. I zapewnia maksymalne wykorzystanie pamięci.
W każdym razie śledzenie rss i vss jest mylące, ponieważ strony mogą być udostępniane, dlatego właśnie
memusg
. Co należy zrobić, to naprawdę śledzić sumęPss
w/proc/[pid]/smaps
lub wykorzystaniepmap
. GNOME monitor-system to robił, ale było to zbyt drogie.źródło
Ponowne wynalezienie koła z ręcznie wykonanym skryptem bashowym. Szybko i czysto.
Mój przypadek użycia: Chciałem monitorować maszynę z systemem Linux, która ma mniej pamięci RAM, i chciałem zrobić migawkę użycia każdego kontenera, gdy działa on przy dużym obciążeniu.
Przykładowe dane wyjściowe:
źródło
W systemie macOS zamiast tego można użyć DTrace. Aplikacja „Instruments” jest do tego przyjemnym GUI, jest dostarczana z XCode afaik.
źródło
„htop” jest najlepszym poleceniem, aby zobaczyć, który proces zużywa ile pamięci RAM…
po więcej szczegółów http://manpages.ubuntu.com/manpages/precise/man1/htop.1.html
źródło
Przepraszam, jestem tu pierwszy raz i mogę zadawać tylko pytania…
Zastosowane sugerowane:
następnie:
to bardzo różni się od tego, które
top
polecenie pokazuje w podobnym momencie:jakie są mierzone jednostki z Valgrind?
/usr/bin/time -v ./test.sh
Nigdy nie odpowiedział - należy karmić bezpośrednio do pliku wykonywalnego/usr/bin/time
, takich jak:źródło