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.