Czy istnieje narzędzie umożliwiające rejestrowanie zużycia pamięci?

18

Chcę monitorować wykorzystanie pamięci przez proces i chcę rejestrować te dane. Czy takie narzędzie istnieje?

tshepang
źródło
1
Myślę, że ten link o programowym monitorowaniu użycia pamięci procesu będzie przydatny, aby rozwiązać twoje potrzeby.
Sen

Odpowiedzi:

8

Napisałem skrypt, aby dokładnie to zrobić . Zasadniczo pobiera próbki psw określonych odstępach czasu, aby stworzyć profil określonego procesu. Proces może zostać uruchomiony przez samo narzędzie monitorujące lub może być procesem niezależnym (określonym przez pid lub wzorzec poleceń).

Jeet
źródło
1
Syrupy najwyraźniej przeniósł się na github.com/jeetsukumaran/Syrupy
Framester
12

Czasami, gdy pojawia się taka potrzeba, po prostu robię:

$ top -d 1 -b |grep <process> >>somefile

To nie jest eleganckie rozwiązanie, ale wykonuje zadanie, jeśli chcesz, aby szybka, surowa wartość zweryfikowała twoją hipotezę.

Sridhar Iyer
źródło
Myślę, że jest elegancki w swojej prostocie. Możesz zrobić, grep --line-buffered <process> >>somefileaby zmusić grep do wypisywania każdej linii bez buforowania
Ott Toomet
7

sar( System Activity Reporter ) z pakietu sysstat jest twoim przyjacielem w takich przypadkach.

Innym sposobem byłoby monitorowanie w połączeniu z danymi historycznymi, np. Munin, pnp4nagios, rrdtools, ...

chrześcijanin
źródło
1
ale czy sarmożna skupić się tylko na jednym procesie? głównie wydaje się, że monitoruje system jako całość
ksenoterracid
3
pidstatPolecenia również z pakietu sysstat zapewnia dość ładny interfejs dla statystyk dotyczących jednego procesu raportowania.
Steven D
@xenoterracide Steven D miał odpowiedź. Wcześniej nie wiedziałem o tym poleceniu.
Christian
4

Oprócz wyżej wymienionego sar, polecam na szczycie . Zapisuje dziennik binarny, który można później przejrzeć, a poza tym pamięć oszczędza wiele innych informacji.

rsuarez
źródło
3

Możesz spróbować Valgrind .

Valgrind to środowisko instrumentacyjne do budowania narzędzi do analizy dynamicznej. Istnieją narzędzia Valgrind, które mogą automatycznie wykrywać wiele błędów zarządzania pamięcią i wątków oraz szczegółowo profilować twoje programy. Możesz także użyć Valgrind do tworzenia nowych narzędzi.

Dystrybucja Valgrind obejmuje obecnie sześć narzędzi jakości produkcyjnej: wykrywacz błędów pamięci , dwa wykrywacze błędów wątków, profil pamięci podręcznej i prognozowania gałęzi, bufor pamięci generującej graf wywołań i profil prognozowania gałęzi oraz profil stosu .

andcoz
źródło
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
saji89
Masyw tego dokumentu szczegółowo wyjaśnia.
Shawn Xie,
0

Podoba mi się prosta odpowiedź Sridhara, ale rzuciłem własną, zanim wypróbowałem jego:

import json, psutil, datetime, time

with open('log.txt', 'w') as f:
  while True:
    json.dump((datetime.datetime.now().isoformat(),
               psutil.Process(7274).memory_info()._asdict()), f)
    f.write('\n')
    f.flush()
    time.sleep(1)

Jest to w zasadzie przydatne tylko, jeśli chcesz uzyskać uporządkowane dane wyjściowe. Zmień odpowiednio 7274. Również Python 3.5. Coś się zepsuło _asdict(), więc użyj Python 2.

Plik wyjściowy wygląda następująco:

["2019-03-19T11:21:53.784670", {"rss": 220389376, "vms": 538984448, "shared": 15724544, "text": 303104, "lib": 0, "data": 221364224, "dirty": 0}]
["2019-03-19T11:21:54.786136", {"rss": 220438528, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:55.787555", {"rss": 220495872, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
["2019-03-19T11:21:56.788754", {"rss": 220528640, "vms": 539119616, "shared": 15724544, "text": 303104, "lib": 0, "data": 221499392, "dirty": 0}]
Robert Fleming
źródło