系统内存耗尽时需要应用程序/脚本警报

系统内存耗尽时需要应用程序/脚本警报

我不想使用交换文件(由于内核或 AMD 驱动程序中存在一些错误)。

我想要运行一些实用程序来监控可用系统内存,并在其低于某个指定限制时提醒我。

这将通知我需要关闭一些应用程序(或浏览器选项卡)以避免由于某些奇怪的 kswapd0 I/O 活动(可能是另一个错误)而导致系统冻结。

有没有什么合适的软件?

更新:

我根据自己的需要重新设计了 Gary 提供的脚本,并希望与大家分享

#!/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

答案1

您可以尝试使用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

答案2

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 'Low Memory: $percent_used% used'");

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

相关内容