Bir işlemin bellek kullanımını izlemek istiyorum ve bu verilerin günlüğe kaydedilmesini istiyorum. Böyle bir araç var mı?
Bir işlemin bellek kullanımını izlemek istiyorum ve bu verilerin günlüğe kaydedilmesini istiyorum. Böyle bir araç var mı?
Yanıtlar:
Bunu yapmak için bir senaryo yazdım . Temel ps
olarak belirli bir sürecin profilini oluşturmak için belirli aralıklarla örnekler verir. İşlem, izleme aracının kendisi tarafından başlatılabilir veya bağımsız bir süreç olabilir (pid veya komut deseni ile belirtilir).
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.
grep --line-buffered <process> >>somefile
Grep'i arabelleğe almadan her satırın çıktısını almaya zorlamak isteyebilirsiniz
sar
( Sistem Etkinlik Raporlayıcısı ) sistemdenBöyle bir durumda paketinden arkadaşınızdır.
Başka bir yol, örneğin Munin, pnp4nagios, rrdtools, ...
sar
tek bir işleme odaklanabilir misiniz? çoğunlukla sistemi bir bütün olarak izlemek gibi görünüyor
pidstat
Sysstat paketten da komut tek sürecine ilişkin istatistiklerin raporlanması için oldukça güzel bir arayüz sağlar.
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 .
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}]