На этот вопрос уже есть ответ:
Я не буду использовать файл подкачки (из-за какой-то ошибки в ядре или драйвере AMD).
Я не хочу, чтобы какая-то утилита работала и отслеживала свободную системную память и предупреждала меня, когда она становится меньше определенного предела.
Это уведомит меня о том, что мне нужно закрыть некоторые приложения (или вкладки браузера), чтобы избежать зависания системы из-за какой-то странной активности ввода-вывода kswapd0 (возможно, еще одна ошибка).
Есть ли подходящее программное обеспечение?
ОБНОВЛЕНИЕ:
Я переработал сценарий, предоставленный Гэри, для моих нужд и хочу поделиться им
#!/bin/bash
#Minimum available memory limit, MB
THRESHOLD=400
#Check time interval, sec
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 $free""MB"", buffers $buffers""MB"", cached $cached""MB"", available $available""MB"""
if [ $available -lt $THRESHOLD ]
then
notify-send "Memory is running out!" "$message"
fi
echo $message
sleep $INTERVAL
done
Версия PHP сценария:
Свободная память как показано в системном мониторе: Свободный = Общее количество - (Used-buffered-cached)
Каково различие между отчетом об использовании памяти в Системном мониторе и тем свободным?
Примечание: Запускать этот скрипт как использование задания крона:
* * * * * env DISPLAY=:0.0 path/to/file 90
или
@restart env DISPLAY=:0.0 path/to/file
не прокомментируйте цикл с условием продолжения для выполнения его вручную:
Код:
#!/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 'Low Memory: $percent_used% used'");
//sleep($interval);
//}
exit();
?>
Вы можете попробовать использовать free
.
free -s n
будет обновлять вывод каждые n
секунд. Оберните это в if
для любого порога, который, по вашему мнению, используется «слишком много памяти», и отобразите сообщение, когда он достигнет этой точки.
РЕДАКТИРОВАТЬ: Вот сценарий, который я придумал. Грубо, но это работает.
#Checks for low memory.
#!/bin/bash
#cutoff_frac is basically how much used memory can be at in terms of how much
#total memory you have...2 is 1/2 of 100% or an alert when you're using 50% mem, etc.
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 "Low memory!!"
fi
sleep 5
done
exit