Saya ingin memantau penggunaan memori dari suatu proses, dan saya ingin data ini dicatat. Apakah alat semacam itu ada?
Saya ingin memantau penggunaan memori dari suatu proses, dan saya ingin data ini dicatat. Apakah alat semacam itu ada?
Jawaban:
Saya telah menulis naskah untuk melakukan hal ini . Pada dasarnya sampel ps
pada 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).
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.
grep --line-buffered <process> >>somefile
untuk memaksa grep untuk mengeluarkan setiap baris tanpa buffering
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, ...
sar
difokuskan hanya pada satu proses? sebagian besar tampaknya memantau sistem secara keseluruhan
pidstat
perintah juga dari paket sysstat menyediakan antarmuka yang cukup bagus untuk melaporkan statistik proses tunggal.
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 .
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}]