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

У нас встроенная система 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) непригоден, потому что результат может быть отрицательным.

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%

  • Может ли компьютер Linux работать как беспроводной клиент, так и точка доступа одновременно с использованием одного физического интерфейса WLAN?
  • Сохранить историю bash, регулярно
  • Как я могу получить пропускную способность интерфейса в любой момент времени из командной строки Linux?
  • Как может `какой cmd`! = Cmd?
  • Может ли пользователь Linux принадлежать более чем одной группе?
  • {Debian} Отключение и повреждение внешнего диска при загрузке больших файлов с помощью файла seafile
  • Разрешения Unix-разрешения с пользователями, принадлежащими к той же группе, которые получают доступ к папке
  • Перемещение всех файлов вложенных папок в другую папку
  • Инструмент для разметки больших файлов
  • Требовать пароли пользователей на linux только в будние дни
  • Cant start systemd - Не удалось получить соединение D-Bus
  • Уменьшение переключения режима видео во время загрузки Linux
  • Давайте будем гением компьютера.