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

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

Система мониторинга через free

 [[email protected] ~]# 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" [email protected] fi fi 

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

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

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

  • Могу ли я запустить Linux на планшет Android?
  • Динамически отключать ядра мощным способом?
  • Linux SOCKS5 туннелирование не работает с udp-трафиком
  • Как я могу использовать квоты в самбе?
  • Как использовать семафоры POSIX для разветвленных процессов в C?
  • SSH по-прежнему запрашивает пароль после настройки проверки подлинности на основе ключа
  • Будет ли использовать один и тот же пароль для Windows 7 и Ubuntu, чтобы он стал проще взломать?
  • ACL vs стандартные разрешения файлов - которые используются при доступе к файлу?
  • Создайте много tar-файлов из каталога с 500000 файлами
  • Как узнать, что делает клиент DHCP?
  • Какое значение rdisk в boot.ini сопоставляет с каким диском?
  • Interesting Posts

    Как конвертировать 24-х часовой формат в формат до 12 часов?

    разница между версиями подписей – V1 (подпись Jar) и V2 (полная подпись APK) при создании подписанного apk в AndroidStudio?

    AVAudioPlayer: как изменить скорость воспроизведения аудио?

    Как найти кодировку по умолчанию или кодировку в Java?

    Как получить нить и кучу дампа процесса Java в Windows, который не работает в консоли

    Когда использовать IList и когда использовать List

    Windows все еще полагается на MS-DOS?

    Переменные экземпляра, указанные в файле реализации ObjC

    Как удалить файл с SD-карты?

    Является ли Java целыми числами в маленьком концевом или большом конце?

    Конструктор по умолчанию с пустыми скобками

    Диспетчер задач показывает 100% загрузку процессора, но ничего в списке процессов не делает

    Что лучше – лучшее приложение для VM: VMWare, Parallels или Virtual PC

    Проблема совместимости контроллера IDE во время обновления Windows 7 x64

    Получить все ссылки на странице html?

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