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

У нас встроенная система 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: как спящий режим после периода сна
  • Подайте жесткий диск ПК в качестве запоминающего устройства USB
  • Как пинговать, когда за прокси?
  • Как создать tar-архив, разбитый на несколько разделов, или охватывая его?
  • Неизвестный кодер 'libmp3lame'
  • Запуск программы GUI из терминала Linux предотвращает дальнейшее использование
  • Имейте файл с именем ~ (tilde) в моем домашнем каталоге
  • Проблемы с Windows / Linux - BSOD
  • Linux Live CD: предустановлена ​​Flash?
  • Перенос Windows 7 на новый жесткий диск / раздел
  • Сколько времени потребуется, чтобы сократить количество разделов на 44 ГБ до 10 ГБ
  • Interesting Posts

    Специальные tags ASP.NET

    Должен ли я использовать std :: function или указатель функции в C ++?

    ListView setOnItemClickListener не работает, добавив кнопку

    Поразрядные операторы и “endianness”

    Помощник по обновлению Windows 10 застрял на 99%

    Как получить команды, выпущенные в сеансе ssh

    Усечение всех таблиц в базе данных Postgres

    Пароль Windows 8, ctrl-backspace

    Как идентифицировать повторяющиеся файлы (по имени и размеру) и удалять их?

    Перемещение хромированного окна на другой монитор превращает его в черный

    Почему я не могу сохранить значение и ссылку на это значение в одной и той же структуре?

    Рекурсивно удалять папки и файлы и исключать определенную подпапку

    Можем ли мы редактировать свойства BIOS на рабочем столе?

    Когда я переношу файлы между серверами на моем рабочем столе, мой компьютер является посредником?

    Windows 7: разрешения пользователя сохраняют сброс для внешнего жесткого диска

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