2009-12-08 17 views
26

Bellek tüketimini sistem başlangıcından günlüğe kaydetmek için kullanıma hazır bir çözüm var mı? Verileri basit bir metin dosyasına veya bazı veritabanlarına kaydetmek istiyorum, böylece daha sonra analiz edebilirim.Linux'ta bellek tüketimi nasıl kaydedilir?

Linux 2.4 tabanlı tümleşik sistem üzerinde çalışıyorum. Bellek tüketimiyle ilgili sorunu gidermem gerekiyor. Uygulamam otomatik olarak her sistem başlangıcında başlıyor. Verileri düzenli aralıklarla (mümkün olduğunca sık) zaman damgalarıyla almanın yoluna ihtiyacım var, bu yüzden sorunu takip edebilirim.

Sorunumun belirtileri: sistem başladığında, ana uygulamamı ve GUI'yi sistemin ana parametrelerini görselleştirmek için başlattı. GTI + (X sunucusu) tabanlı GUI. GUI ve X sunucuyu devre dışı bırakırsam, uygulamam Tamam çalışır. GUI ve X sunucusunu etkinleştirirseniz, anakartta yüklü 256 MB veya 512 MB fiziksel bellek olduğunda çalışmaz. Yüklü 1 GiB belleğim varsa her şey yolunda.

+0

Bu, bu soruya benzer: http://stackoverflow.com/questions/131303/linux-how-to-measure-actual-memory-usage-of-an-application-or-process – monksy

+0

mu Uygulamanız en az bir süre çökmeden önce çalışır? –

+0

Evet, önceki sürümler aynı sistemde Tamam çalışır. Şimdi yeni versiyon geliştirdik ve bu problemi uygulamaya başladık. – bialix

cevap

23

küçük komut

rm memory.log 
while true; do free >> memory.log; sleep 1; done 
+0

gerçekten, bu ihtiyacım olana çok yakın. Zaman damgalarını kendim ekleyebilirim. – bialix

+9

'free -s 1> memory.log'; Bu, her saniye yeni bir işlem başlatmanın maliyetlerine katlanmıyor.Yine de zaman damgası yok. (Bunun eski bir yazı olduğunu biliyorum, ama aynı şeyi arıyordum ve diğerleri de öyle). –

+1

Bazı ücretsiz sürümlerinde, bir hata nedeniyle -c ile yazdırmak istediğiniz süreyi belirtmeniz gerekir. Aksi takdirde hatayı ücretsiz gösterir: saniye argümanı '1' başarısız oldu – Sputnik

2

Bir başlangıç ​​komut içine

vmstat X >> mylogfile 

gibi bir şey koyabilirsiniz. Uygulamanız zaten başlangıç ​​aşamasında olduğundan, bu satırı uygulamanızın zaten kullandığı başlatma komut dosyasının sonuna ekleyebilirsiniz.

+0

İpucu için teşekkürler, ancak verileri her saniye daha sık kaydetmem gerekiyor. – bialix

3

gibi (X günlük mesajları arasındaki saniye içinde olduğu) * Nix sistemlerde

sar 

adında bir program var. Bellek kullanımını izlemek için bunu kullanmayı deneyebilirsiniz. Düzenli aralıklarla ölçümler alır. Daha fazla ayrıntı için

man sar 

yapın. Sanırım, bellek ölçümlerini almak için -r, istediğiniz aralığı belirtmek için -i.

+1

Diğer önerilen çözümlerden kesinlikle daha güçlü olmasına rağmen, kurulum için biraz daha hantaldır. Seal için – Ale

4

Bir crontab girdisi olacaktır ekleyerek düşünüyorum yeterince

*/5 * * * * free -m >> some_output_file 

neredeyse aynı şeyi ama yüklemek ve yapılandırmak çok daha kolaydır olacak SeaLion, New Relic, Server Density vb gibi diğer araçlar vardır. En sevdiğim SeaLion, hem özgür hem de ortak linux komutlarının ham çıktılarının müthiş bir zaman çizelgesi görünümü sunuyor.

+0

+1, en hızlı kayıt/kurulum EVER. Düşüncem olan her şey beni yaklaşık 6 saniye sürdü - e-postamda bir şifre yazdım. Ssh ve boom'a tek bir komut yapıştırdım istatistiklerim çıktı. – rgvcorley

17

Aşağıdaki komut dosyası zaman damgalarını ve bir üstbilgiyi yazdırır.

#!/bin/bash -e 

echo "  date  time $(free -m | grep total | sed -E 's/^ (.*)/\1/g')" 
while true; do 
    echo "$(date '+%Y-%m-%d %H:%M:%S') $(free -m | grep Mem: | sed 's/Mem://g')" 
    sleep 1 
done 

Çıktı şunun gibi görünüyor (Ubuntu 15.04, 64-bit üzerinde test edilmiştir).

 date  time   total  used  free  shared buffers  cached 
2015-08-01 13:57:27   24002  13283  10718  522  693  2308 
2015-08-01 13:57:28   24002  13321  10680  522  693  2308 
2015-08-01 13:57:29   24002  13355  10646  522  693  2308 
2015-08-01 13:57:30   24002  13353  10648  522  693  2308