Alarm amaçlı hafıza kullanımı nasıl izlenir


8

Takas olmadan Linux sistemini yerleştirdik.

Şu anda bellek kullanımı% bir eşiğin üzerine çıktığında alarmı yükseltmeliyiz. Bellek kullanımı% (daha yüksek) bir eşiğin üzerine çıktığında yeniden başlatın.

Neden bunu yapmak istiyoruz: Bazı programlar sızdırıyorsa, çekirdeği işlemlerimizi öldürmeye başlamadan önce (yeniden veri bozulmasına veya kullanılamamasına yol açabilen) güvenliği yeniden başlatabiliriz.

Fakat bir sorunumuz var:

Amacımız için kullanılabilecek% hafıza kullanımı - nasıl sayılır?

/ Proc / meminfo değerlerini kullanarak bellek kullanımını saymaya çalıştık:

/ # cat /proc/meminfo
MemTotal:       126744 kB
MemFree:         58256 kB
Buffers:         16740 kB
Cached:          31308 kB
SwapCached:          0 kB
Active:          37580 kB
Inactive:        24000 kB

Başarısız:

(MemTotal - MemFree) Kullanılamaz, çünkü örneğin önbellekleri içerir.

(MemTotal - MemFree - Buffers - Cached) etkisini yoksaydı Inactive. Bu yüzden aynı zamanda çok büyük bellek kullanım değerleri verir.

(MemTotal - MemFree - Buffers - Cached - Inactive) kullanılamaz, çünkü sonuç negatif olabilir.

Yanıtlar:


5

Sistemi üzerinden izlemek free

[root@localhost ~]# free
          total       used       free     shared    buffers     cached
Mem:    2058240    1776788     281452          0      89780    1335840
-/+ buffers/cache:  351168    1707072
Swap:   4095992        100    4095892

Bak -/+ buffers/cache hat used ve free

Her işlemi / proc üzerinden izleyin

Bir işlemin hafızasını izlemek için bu python betiğini ve / proc / pid / stat kullandım:

http://phacker.org/2009/02/20/monitoring-virtual-memory-usage-with-python/

Muhtemelen böyle bir şeyi c'ye çevirmek istersiniz.

Her işlem için kaynağı sınırla

veya kullan ulimit / setrlimit

https://stackoverflow.com/questions/4983120/limit-memory-usage-for-a-single-linux-process


Python betiğinizin bellek kullanımını hesaplamak için kullandığı yöntemi açıklayabilir misiniz? Bu çok daha iyi bir cevap olur.
Flimzy

Eh, sadece vm kullanımını bir saniyelik adımlarla kaydeder. Bunu program ömrü boyunca mem tüketimini grafiklemek için kullandım. Bu uzun süren programlarda mem sızıntılarını ayıklamak için kullanışlıdır.
snies

Bunu sadece bir init zamanından sonra bir prog izlemek için kullanabilirsiniz. Vmusage belirli bir eşiği geçerse bazı "kaçak şüpheli bayrağı" uyar.
snies

1
Phacker.org bağlantısı artık yok
f01

... bu yüzden StarckExchange her zaman sadece linkleri değil, scriptlerin içeriğini de göndermeyi ister.
JDS

2

Belleği izlemek ve değerlerine göre hareket etmek için cron içinde bir kabuk komut dosyasını serbest komutla kullanabilirsiniz. Örneğin, RAM belleği izlemek için:

#!/bin/bash

LOG_DIR=/var/log/memory_monitor.log

DATE=$(date +%d/%m/%Y)
TIME=$(date +%H:%M)
TIMESTAMP="$DATE $TIME"

MONITOR=$(free | grep Mem)
MEM_USED=$(echo $MONITOR | awk '{ print $3 }')
MEM_FREE=$(echo $MONITOR | awk '{ print $4 }')

echo "$TIMESTAMP $MEM_USED $MEM_FREE" >> $LOG_DIR

Çıktının yankılanması yerine, değerleri istediğiniz sınırlara göre değerlendirebilir ve posta, yeniden başlatma veya istediğiniz eylemi yapabilirsiniz:

if [ eval_values > threshold ]
then
    # Do stuff (mail, reboot, etc)
fi

Sonra istediğiniz aralıklarla çalıştırılmak üzere crontab'a ekleyin.


2
#!/bin/bash

threshold=90
threshold2=95

freemem=$(($(free -m |awk 'NR==2 {print $3}') * 100))

usage=$(($freemem / 512))

if [ "$usage" -gt "$threshold" ]

then

/etc/init.d/service_name restart

     if [ "$usage" -gt "$threshold2" ]

     then

     echo "The memory usage has reached $usage% on $HOSTNAME." | mail -s "High Memory Usage Alert" admin@domain.com


     fi
fi

Bunu alert.sh olarak adlandırın ve komutu çalıştırın: chmod +x alert.sh

Her 10 dakikada bir bu betiği çalıştırmak için bir cron yapılandırın

'512' yi sunucunuzun toplam hafızasıyla (MB) ve 'admin@domain.com' ile asıl e-posta adresiyle değiştirdiğinizden emin olun. Bu, bellek kullanımı% 95'in üzerine çıktığında bir e-posta uyarısı gönderir ve% 90'a ulaşırsa hizmeti "service_name" olarak yeniden başlatır


1

sysstat paketinden bir başka yararlı kullanım sar.

Hafıza bilgileri için şunu kullanın:

$ sar -r 1
Linux 3.0.0-12-generic (HFC-2600)       05/03/2012      _i686_  (4 CPU)

01:35:45 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact
01:35:46 PM    118484    907364     88.45     59200    317368   2169716    104.75    412476    436140

Bu kutuda kesinlikle daha fazla RAM kullanabilirim.

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.