Как отслеживать использование памяти для тревожной цели

У нас встроенная система Linux без свопа.

Currenly мы должны поднять тревогу, когда использование памяти% увеличивается над threashold. И перезагрузитесь, когда использование памяти увеличивается на (более высокий) порог.

Почему мы хотим это сделать: если некоторые утечки программ, мы можем сделать перезагрузку системы, прежде чем ядро ​​начнет убивать наши процессы (что может привести к повреждению данных или недоступности).

Но у нас есть проблема:

Как подсчитать использование памяти -%, которое можно использовать для нашей цели?

Мы попытались подсчитать использование памяти, используя значения / proc / meminfo:

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

Безуспешно:

(MemTotal - MemFree) не используется, поскольку он содержит, например, кеши.

(MemTotal - MemFree - Buffers - Cached) игнорировал эффект Inactive . Таким образом, он также дает слишком большие значения использования памяти.

(MemTotal - MemFree - Buffers - Cached - Inactive) непригоден, потому что результат может быть отрицательным.

  • Альтернатива для «tail -f», которая следует за именем файла
  • Существуют ли какие-либо инструменты в linux для разделения файла на месте?
  • Подсчет емкости диска с использованием модели цилиндрового головного сектора
  • Проверьте, повреждены ли файлы PDF с помощью командной строки в Linux
  • Как запустить несколько рабочих столов X?
  • UnionFS одинаково в окнах, фактически объединять папки
  • (Reverse-i-search) в Bash
  • Unix / Linux найти и отсортировать по дате изменения
  • 4 Solutions collect form web for “Как отслеживать использование памяти для тревожной цели”

    Система мониторинга через 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 

    Посмотрите на used и free линию -/+ buffers/cache

    Контролировать каждый процесс через / proc

    Я использовал этот скрипт python и / proc / pid / stat, чтобы контролировать память процесса:

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

    Вы, вероятно, хотели бы перевести что-то вроде этого на c.

    Ограничить ресурс для каждого процесса

    Или использовать ulimit / setrlimit

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

    Вы можете использовать сценарий оболочки в cron со свободной командой для наблюдения за памятью и принятия соответствующих значений. Например, для наблюдения за оперативной памятью:

     #!/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 

    Вместо того, чтобы повторять вывод, вы можете оценить значения до требуемых пределов, а также отправить почту, перезагрузить или любое другое действие, которое вы хотите:

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

    Затем вы добавляете его в crontab для запуска в нужные вам интервалы.

    Другой полезной утилитой из пакета sysstat является sar.

    Для информации о памяти используйте:

     $ 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 

    Я определенно мог бы использовать больше памяти на этой коробке.

     #!/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 

    Назовите это как alert.sh и выполните команду: chmod +x alert.sh

    Настройте cron для запуска этого скрипта каждые 10 минут

    Обязательно замените «512» на общую память вашего сервера в МБ и «admin@domain.com» фактическим адресом электронной почты. Это отправит уведомление по электронной почте, когда использование памяти превысит 95%, и перезапустит сервис «имя_службы», если он достигнет 90%

    Давайте будем гением компьютера.