Precisa de alerta de aplicativo / script quando a memória do sistema está se esgotando [duplicado]

1

Eu não não vou usar o arquivo de troca (devido a algum bug no kernel ou no driver AMD).

Eu não quero ter algum utilitário rodando e monitorando a memória do sistema livre e me alertando quando ele se tornar menor do que alguns limites especificados.

Isso me notificará que eu preciso fechar alguns aplicativos (ou guias do navegador) para evitar o congelamento do sistema devido a alguma estranha atividade de E / S do kswapd0 (provavelmente outro bug).

Existe algum software apropriado?

ATUALIZAÇÃO:

Eu redesenhei o script fornecido por Gary para minha necessidade e quero compartilhá-lo

#!/bin/bash

#Minimum available memory limit, MB
THRESHOLD=400

#Check time interval, sec
INTERVAL=30

while :
do

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

    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
    
por gumkins 30.03.2013 / 20:29

2 respostas

4

Você pode tentar usar free .

free -s n atualizará a saída a cada n segundos. Embrulhe isso em um if para qualquer limite que você ache que é "muita memória" sendo usada, e exiba uma mensagem quando chegar a esse ponto.

EDIT: Aqui está o script que eu criei. Rude, mas funciona.

#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 }')
let "threshold = $total_mem / $cutoff_frac"

while :
do

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

    if [ $free_mem -lt $threshold ]
        then
        notify-send "Low memory!!"
    fi

    sleep 5

done

exit
    
por Gary 30.03.2013 / 20:36
1

Versão do PHP do script:

A memória livre mostrada no sistema moniter é: Free = Total- (cache armazenado em buffer)

What é a diferença entre o relatório de uso de memória no Monitor do Sistema e aquele de graça?

NOTA: Para executar este script como uma tarefa do cron use:

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

ou

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

descomente o loop while para executá-lo manualmente:

Código:

#!/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();
?>
    
por StandardSpecification 17.09.2013 / 21:04