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?


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

Odpowiedzi:



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ę.


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, ...


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.


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 .


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}]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.