Нужен скрипт/приложение для уведомления, когда системная память исчерпывается [дубликат]

Вопрос или проблема

Я не хочу использовать файл подкачки (из-за какого-то бага в ядре или драйвере AMD).

Я хочу, чтобы какая-то утилита работала и контролировала свободную память системы и уведомляла меня, когда она становится меньше заданного предела.

Это позволит мне знать, что мне нужно закрыть некоторые приложения (или вкладки браузера), чтобы избежать зависания системы из-за какого-то странного I/O-активности kswapd0 (вероятно, другого бага).

Существует ли подходящее программное обеспечение?

ОБНОВЛЕНИЕ:

Я переработал скрипт, предоставленный Гари, под свои нужды и хочу поделиться им

#!/bin/bash

# Минимальный предел доступной памяти, МБ
THRESHOLD=400

# Интервал проверки времени, секунды
INTERVAL=30

while :
do

    free=$(free -m | awk '/^Mem:/{print $4}')
    buffers=$(free -m | awk '/^Mem:/{print $6}')
    cached=$(free -m | awk '/^Mem:/{print $7}')
    available=$(free -m | awk '/^-\/+/{print $4}')

    message="Свободно $free""МБ"", буфер $buffers""МБ"", кэш $cached""МБ"", доступно $available""МБ"""

    if [ $available -lt $THRESHOLD ]
        then
        notify-send "Память заканчивается!" "$message"
    fi

    echo $message

    sleep $INTERVAL

done

Вы можете попробовать использовать free.

free -s n будет обновлять вывод каждые n секунд. Оберните это в if для любого предела, который вы считаете “слишком большим использованием памяти”, и отображайте сообщение, когда оно достигает этой точки.

ИЗМЕНЕНИЕ: Вот скрипт, который я придумал. Грубоват, но он работает.

# Проверяет на низкую память.

#!/bin/bash

# cutoff_frac — это, по сути, насколько используемая память может быть в терминах того, сколько
# у вас всего памяти... 2 — это 1/2 от 100% или предупреждение, когда вы используете 50% памяти и т.д.
cutoff_frac=2

total_mem=$(free|awk '/^Mem:/{print $2}')
let "threshold = $total_mem / $cutoff_frac"

while :
do

    free_mem=$(free|awk '/^Mem:/{print $4}')

    if [ $free_mem -lt $threshold ]
        then
        notify-send "Низкая память!!"
    fi

    sleep 5

done

exit

Версия скрипта на PHP:

Свободная память, как показано в системном мониторинге: Свободно = Всего – (Использовано – буферизировано – кэшировано)

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

ПРИМЕЧАНИЕ: Чтобы запустить этот скрипт как задание cron, используйте:

* * * * *  env DISPLAY=:0.0 path/to/file 90 

или

@restart  env DISPLAY=:0.0 path/to/file

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

Код:

#!/usr/bin/php
<?php
$alert_percent=($argc>1)?(int)$argv[1]:90;
//$interval=($argc>2):(int)$argv[2]:25;

//while(true)
//{
 exec("free",$free);

$free=implode(' ',$free);
preg_match_all("/(?<=\s)\d+/",$free,$match);

list($total_mem,$used_mem,$free_mem,$shared_mem,$buffered_mem,$cached_mem)=$match[0];

$used_mem-=($buffered_mem+$cached_mem);

$percent_used=(int)(($used_mem*100)/$total_mem);

if($percent_used>$alert_percent)
exec("notify-send 'Низкая память: $percent_used% использовано'");

//sleep($interval);
//}
exit();
?>

.

Ответ или решение

Уведомление о нехватке оперативной памяти: полное руководство

Введение

Контроль за состоянием оперативной памяти вашей системы имеет ключевое значение для предотвращения сбоев и зависаний, особенно на системах, где использование программного обеспечения ресурсоемко. Если вы испытываете проблемы с управлением памятью и хотите получать уведомления, когда доступная память опускается ниже определенного порога, то представленные ниже решения помогут вам решить эту задачу.

Проблема

Пользователь сообщает о проблеме нехватки оперативной памяти в системе. Он не хочет использовать swap-файл из-за возможных ошибок в ядре или драйверах, и ему необходимо создать утилиту для мониторинга запаса свободной памяти с возможностью получения уведомлений.

Решение

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

Скрипт на Bash

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

#!/bin/bash

# Минимальный порог свободной памяти, МБ
THRESHOLD=400

# Интервал проверки, секунд
INTERVAL=30

while :
do
    free=$(free -m | awk '/^Mem:/{print $4}')  # Свободная память
    buffers=$(free -m | awk '/^Mem:/{print $6}')  # Буферы
    cached=$(free -m | awk '/^Mem:/{print $7}')  # Кэш
    available=$(free -m | awk '/^-\/+/{print $4}')  # Доступная память

    message="Свободная память: $free МБ, буферы: $buffers МБ, кэш: $cached МБ, доступно: $available МБ"

    if [ $available -lt $THRESHOLD ]; then
        notify-send "Память заканчивается!" "$message"
    fi

    echo $message
    sleep $INTERVAL
done

Параметры скрипта

  1. THRESHOLD: Задает минимальную доступную память (400 МБ в данном примере), при достижении которой будет отправлено уведомление.
  2. INTERVAL: Определяет, как часто (каждые 30 секунд) скрипт будет проверять состояние оперативной памяти.

Инструкция по запуску

  1. Сохраните скрипт в файл, например check_memory.sh.
  2. Добавьте права на выполнение:
    chmod +x check_memory.sh
  3. Запустите скрипт:
    ./check_memory.sh

Использование cron для автоматизации

Если вы хотите, чтобы этот скрипт выполнялся автоматически, можно добавить его в crontab:

* * * * * /path/to/check_memory.sh

Эта команда будет запускать скрипт каждую минуту.

Заключение

Представленный метод является простым и эффективным способом мониторинга состояния оперативной памяти в вашей системе без использования swap-файлов. С помощью этого скрипта вы сможете получать своевременные уведомления о нехватке ресурсов, что позволит вам быстро принимать меры и предотвращать возможные сбои в работе системы. Внедрив это решение, вы сможете улучшить производительность своей системы и повысить ее стабильность.

Оцените материал
Добавить комментарий

Капча загружается...