Bellek kullanımının günlüğe kaydedilmesini sağlayan bir araç var mı?


18

Bir işlemin bellek kullanımını izlemek istiyorum ve bu verilerin günlüğe kaydedilmesini istiyorum. Böyle bir araç var mı?


1
Bir işlem belleği kullanımını programlı olarak izlemekle ilgili bu bağlantının , ihtiyacınızı çözmeniz için yararlı olacağını düşünüyorum.
Sen

Yanıtlar:



12

Bazen ihtiyaç ortaya çıktığında:

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

Zarif bir çözüm değildir, ancak hızlı ham değerin hipotezinizi doğrulamasını istiyorsanız işi halledersiniz.


Ben düşünüyorum olduğunu 's basitlikte zarif. grep --line-buffered <process> >>somefileGrep'i arabelleğe almadan her satırın çıktısını almaya zorlamak isteyebilirsiniz
Ott Toomet

7

sar( Sistem Etkinlik Raporlayıcısı ) sistemdenBöyle bir durumda paketinden arkadaşınızdır.

Başka bir yol, örneğin Munin, pnp4nagios, rrdtools, ...


1
ancak sartek bir işleme odaklanabilir misiniz? çoğunlukla sistemi bir bütün olarak izlemek gibi görünüyor
xenoterracide

3
pidstatSysstat paketten da komut tek sürecine ilişkin istatistiklerin raporlanması için oldukça güzel bir arayüz sağlar.
Steven D

@xenoterracide Steven D cevap verdi. Daha önce bu komutun farkında değildim.
Christian

4

Yukarıda belirtilen sar Ayrıca, ben tavsiye ederim tepesinde . Daha sonra inceleyebileceğiniz bir ikili günlük kaydeder ve belleğin yanı sıra diğer birçok bilgiyi de kaydeder.


3

Valgrind'i deneyebilirsin .

Valgrind, dinamik analiz araçları oluşturmak için bir enstrümantasyon çerçevesidir. Birçok bellek yönetimi ve iş parçacığı hatasını otomatik olarak algılayabilen ve programlarınızı ayrıntılı olarak profilleyebilen Valgrind araçları vardır. Valgrind'i yeni araçlar oluşturmak için de kullanabilirsiniz.

Valgrind dağıtımı şu anda altı üretim kalitesinde araç içermektedir: bir bellek hata dedektörü , iki iş parçacığı hata dedektörü, bir önbellek ve dal tahmini profili, bir çağrı grafiği üreten önbellek ve şube tahmini profili ve bir yığın profili .


Bu teorik olarak soruyu cevaplayabilirken, cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak tercih edilir.
saji89

Bu belge masif detaylı olarak açıklanmaktadır.
Shawn Xie

0

Sridhar'ın basit cevabını seviyorum ama denemeden önce kendimi yuvarladım:

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)

Temelde yalnızca yapılandırılmış çıktılar istiyorsanız kullanışlıdır. 7274'ü uygun şekilde değiştirin. Ayrıca Python 3.5. Bir şey kırıldı_asdict() , bu yüzden Python 2'yi kullanın.

Çıktı dosyası şöyle görünür:

["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}]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.