Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

This question already has an answer here:

I don't won't to use swap file (due to some bug in kernel or AMD driver).

I wan't to have some util running and monitoring free system memory and alerting me when it becomes less than some specified limit.

This will notify me that I need to close some applications (or browser tabs) to avoid system freeze due to some strange kswapd0 I/O activity (probably another bug).

Is there any appropriate software?


I've redesigned script provided by Gary for my need and want to share it


#Minimum available memory limit, MB

#Check time interval, sec

while :

    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 ]
        notify-send "Memory is running out!" "$message"

    echo $message

    sleep $INTERVAL

share|improve this question

marked as duplicate by Eric Carvalho, 123456, waltinator, belacqua, John S Gruber May 25 '14 at 14:50

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

It is little funny that my question is marked as a duplicate of another question answered with a copy of my answer I wrote in UPDATE of my question :-) – gumkins Mar 5 at 15:05
up vote 3 down vote accepted

You could try using free.

free -s n will update the output every n seconds. Wrap that in an if for whatever threshold you feel is "too much memory" being used, and display a message when it reaches that point.

EDIT: Here's the script I came up with. Rough, but it works.

#Checks for low memory.


#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.

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

while :

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

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

    sleep 5


share|improve this answer
This is not what I'm looking for. I need a kind of popup being bubbled so I don't have to keep my eyes on console. – gumkins Mar 30 '13 at 19:48
I'm trying to write one that does this - and I'll post it here if I do finish - but for reference, notify-send is just the command you're looking for - it'll make a popup. – Gary Mar 30 '13 at 20:33
@gumkins the script has been edited into the answer – Gary Mar 31 '13 at 3:03
Thank you Gary very much! "notify-send" is a command which certainly will help me in this. Also thank you for your script, I'll test it soon. – gumkins Mar 31 '13 at 7:52

PHP version of the script:

The Free memory as shown in the system moniter is : Free= Total-(Used-buffered-cached)

What is the difference between the memory usage report in System Monitor and the one by free?

NOTE: To run this script as a cron job use:

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


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

uncomment the while loop to run it manually:




$free=implode(' ',$free);




exec("notify-send 'Low Memory: $percent_used% used'");

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.