Apakah ada alat yang memungkinkan pencatatan penggunaan memori?

18

Saya ingin memantau penggunaan memori dari suatu proses, dan saya ingin data ini dicatat. Apakah alat semacam itu ada?

tepang
sumber
1
Saya pikir tautan ini tentang pemantauan terprogram suatu proses penggunaan memori akan berguna bagi Anda untuk menyelesaikan kebutuhan Anda.
Sen

Jawaban:

8

Saya telah menulis naskah untuk melakukan hal ini . Pada dasarnya sampel pspada interval tertentu, untuk membangun profil dari proses tertentu. Proses dapat diluncurkan oleh alat pemantauan itu sendiri, atau dapat berupa proses independen (ditentukan oleh pid atau pola perintah).

Jeet
sumber
1
Syrupy rupanya pindah ke github.com/jeetsukumaran/Syrupy
Framester
12

Kadang-kadang ketika kebutuhan muncul, saya hanya melakukan:

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

Ini bukan solusi yang elegan, tetapi menyelesaikan pekerjaan jika Anda ingin nilai mentah cepat untuk memverifikasi hipotesis Anda.

Sridhar Iyer
sumber
Saya pikir itu adalah elegan dalam kesederhanaan itu. Anda mungkin ingin melakukannya grep --line-buffered <process> >>somefileuntuk memaksa grep untuk mengeluarkan setiap baris tanpa buffering
Ott Toomet
7

sar( System Activity Reporter ) dari paket sysstat adalah teman Anda jika seperti ini.

Cara lain adalah pemantauan yang dikombinasikan dengan data historis, misalnya Munin, pnp4nagios, rrdtools, ...

Kristen
sumber
1
tetapi dapat sardifokuskan hanya pada satu proses? sebagian besar tampaknya memantau sistem secara keseluruhan
xenoterracide
3
The pidstatperintah juga dari paket sysstat menyediakan antarmuka yang cukup bagus untuk melaporkan statistik proses tunggal.
Steven D
@xenoterracide Steven D punya jawabannya. Saya tidak mengetahui perintah ini sebelumnya.
Christian
4

Selain sar yang disebutkan di atas, saya akan merekomendasikan di atas . Ini menyimpan log biner yang dapat Anda teliti setelahnya, dan selain itu memori menyimpan banyak informasi lainnya.

rsuarez
sumber
3

Anda dapat mencoba Valgrind .

Valgrind adalah kerangka kerja instrumentasi untuk membangun alat analisis dinamis. Ada alat Valgrind yang dapat secara otomatis mendeteksi banyak manajemen memori dan bug threading, dan membuat profil program Anda secara terperinci. Anda juga dapat menggunakan Valgrind untuk membuat alat baru.

Distribusi Valgrind saat ini mencakup enam alat berkualitas produksi: detektor kesalahan memori , dua detektor kesalahan benang, cache dan profil prediksi cabang, cache panggilan grafik dan profil prediksi cabang, dan profil tumpukan .

andcoz
sumber
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
saji89
Massif dokumen ini menjelaskan secara rinci.
Shawn Xie
0

Saya menyukai jawaban sederhana Sridhar tetapi saya menggulirkan jawaban saya sendiri sebelum mencoba:

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)

Ini pada dasarnya hanya berguna jika Anda ingin output terstruktur. Ubah 7274 yang sesuai. Juga Python 3.5.sesuatu rusak _asdict(), jadi gunakan Python 2.

File output terlihat seperti:

["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
sumber