Warning when available RAM approaches zeroNeed application/script alerting when system memory is running outMemory limiting solutions for greedy applications that can crash OS?Ubuntu killing processes when no more RAM is availableIs it worth upgrading RAM?Available RAM not being usedRAM vs UBUNTU probemHow to use available RAM?Ubuntu Server 16.04 Available RAMOnly part of my RAM availableLiveboot: Make more RAM availableMiss RAM, Total ram is bigger than Used ram + Free ram by 1.5 gbWhy is Ubuntu swapping when there is RAM available?
How strictly should I take "Candidates must be local"?
Find longest word in a string: are any of these algorithms good?
Is "conspicuously missing" or "conspicuously" the subject of this sentence?
Accepted offer letter, position changed
How are showroom/display vehicles prepared?
Signed and unsigned numbers
PTIJ: Should I kill my computer after installing software?
How can The Temple of Elementary Evil reliably protect itself against kinetic bombardment?
Do items de-spawn in Diablo?
What problems would a superhuman have whose skin is constantly hot?
Accountant/ lawyer will not return my call
Shifting between bemols (flats) and diesis (sharps)in the key signature
Can one live in the U.S. and not use a credit card?
An alternative proof of an application of Hahn-Banach
Reverse string, can I make it faster?
UART pins to unpowered MCU?
Could you please stop shuffling the deck and play already?
Error during using callback start_page_number in lualatex
Declaring and defining template, and specialising them
Intuition behind counterexample of Euler's sum of powers conjecture
Word for a person who has no opinion about whether god exists
Doesn't allowing a user mode program to access kernel space memory and execute the IN and OUT instructions defeat the purpose of having CPU modes?
Is it "Vierergruppe" or "Viergruppe", or is there a distinction?
Conservation of Mass and Energy
Warning when available RAM approaches zero
Need application/script alerting when system memory is running outMemory limiting solutions for greedy applications that can crash OS?Ubuntu killing processes when no more RAM is availableIs it worth upgrading RAM?Available RAM not being usedRAM vs UBUNTU probemHow to use available RAM?Ubuntu Server 16.04 Available RAMOnly part of my RAM availableLiveboot: Make more RAM availableMiss RAM, Total ram is bigger than Used ram + Free ram by 1.5 gbWhy is Ubuntu swapping when there is RAM available?
This is a follow-up to Memory limiting solutions for greedy applications that can crash OS?: ulimit and cgroups are not user friendly, and besides, wouldn't work with applications that spawn separate processes, such as Chrome/Chromium for each new (group of) tabs.
The simple and effective solution, used by Windows 7 actually, is to warn the user that the OS is running low on memory. This simple warning pop-up has prevented me from having any low-memory-caused system freeze in Windows, while I kept running into them on Ubuntu distros that I was testing live (where the RAM-mounted disk would eat up 2GB alone).
So, is there some way to automatically warn the user that the available RAM is nearing zero, without the user having to keep an eye on some memory monitoring gadget? Surely Conky could be configured to do that?
ram memory-usage
add a comment |
This is a follow-up to Memory limiting solutions for greedy applications that can crash OS?: ulimit and cgroups are not user friendly, and besides, wouldn't work with applications that spawn separate processes, such as Chrome/Chromium for each new (group of) tabs.
The simple and effective solution, used by Windows 7 actually, is to warn the user that the OS is running low on memory. This simple warning pop-up has prevented me from having any low-memory-caused system freeze in Windows, while I kept running into them on Ubuntu distros that I was testing live (where the RAM-mounted disk would eat up 2GB alone).
So, is there some way to automatically warn the user that the available RAM is nearing zero, without the user having to keep an eye on some memory monitoring gadget? Surely Conky could be configured to do that?
ram memory-usage
1
Four years later, looks like periodically checkingfree -m
is the way to go.
– Dan Dascalescu
Oct 7 '16 at 6:29
add a comment |
This is a follow-up to Memory limiting solutions for greedy applications that can crash OS?: ulimit and cgroups are not user friendly, and besides, wouldn't work with applications that spawn separate processes, such as Chrome/Chromium for each new (group of) tabs.
The simple and effective solution, used by Windows 7 actually, is to warn the user that the OS is running low on memory. This simple warning pop-up has prevented me from having any low-memory-caused system freeze in Windows, while I kept running into them on Ubuntu distros that I was testing live (where the RAM-mounted disk would eat up 2GB alone).
So, is there some way to automatically warn the user that the available RAM is nearing zero, without the user having to keep an eye on some memory monitoring gadget? Surely Conky could be configured to do that?
ram memory-usage
This is a follow-up to Memory limiting solutions for greedy applications that can crash OS?: ulimit and cgroups are not user friendly, and besides, wouldn't work with applications that spawn separate processes, such as Chrome/Chromium for each new (group of) tabs.
The simple and effective solution, used by Windows 7 actually, is to warn the user that the OS is running low on memory. This simple warning pop-up has prevented me from having any low-memory-caused system freeze in Windows, while I kept running into them on Ubuntu distros that I was testing live (where the RAM-mounted disk would eat up 2GB alone).
So, is there some way to automatically warn the user that the available RAM is nearing zero, without the user having to keep an eye on some memory monitoring gadget? Surely Conky could be configured to do that?
ram memory-usage
ram memory-usage
edited Apr 13 '17 at 12:24
Community♦
1
1
asked Dec 30 '12 at 7:25
Dan DascalescuDan Dascalescu
1,12421637
1,12421637
1
Four years later, looks like periodically checkingfree -m
is the way to go.
– Dan Dascalescu
Oct 7 '16 at 6:29
add a comment |
1
Four years later, looks like periodically checkingfree -m
is the way to go.
– Dan Dascalescu
Oct 7 '16 at 6:29
1
1
Four years later, looks like periodically checking
free -m
is the way to go.– Dan Dascalescu
Oct 7 '16 at 6:29
Four years later, looks like periodically checking
free -m
is the way to go.– Dan Dascalescu
Oct 7 '16 at 6:29
add a comment |
5 Answers
5
active
oldest
votes
Check these scripts:
Need application/script alerting when system memory is running out
#!/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:
#!/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();
?>
1
The script works with small adaptations (I just usedavailable=$(free -m | grep Mem | awk 'print $7')
). To make notify-send work with cron, refer to anmolsinghjaggi.wordpress.com/2016/05/11/…
– morsch
Aug 15 '16 at 21:50
If the language is not English, free will output localized text and parsing fails. Then addLANG=en_US.UTF-8
at the beginnning of the bash script.
– Freddi Schiller
May 19 '17 at 10:22
add a comment |
Another script that I wrote for this purpose:
#!/bin/bash
# Copyright 2019, Mikko Rantalainen
# License: MIT X License
# Minimum available memory until warning, default to 10% of total RAM (MiB)
THRESHOLD=$(grep "MemTotal:" /proc/meminfo | awk ' printf "%d", 0.1*$2/1024')
INTERVAL=60s
echo "Emitting a warning if less than $THRESHOLD MiB of RAM is available..."
while true; do
meminfo=$(cat /proc/meminfo)
free=$(echo "$meminfo" | grep "MemFree:" | awk ' printf "%d", $2/1024')
available=$(echo "$meminfo" | grep "MemAvailable:" | awk ' printf "%d", $2/1024')
inactive=$(echo "$meminfo" | grep "Inactive:" | awk ' printf "%d", $2/1024')
reclaimable=$(echo "$meminfo" | grep "SReclaimable:" | awk ' printf "%d", $2/1024')
usable=$(echo "$free + $inactive / 2 + $reclaimable / 2" | bc)
if test -z "$available"; then
message="Current kernel does not support MemAvailable in /proc/meminfo, aborting"
notify-send "Error while monitoring low memory" "$message"
echo "$message" 1>&2
exit 1
fi
message="Available: $available MiB
Free: $free MiB
Maybe usable: $usable MiB"
if [ "$available" -lt "$THRESHOLD" ]
then
notify-send -u critical "Low memory warning" "$message"
echo "Low memory warning:"
echo "$message"
fi
#echo "DEBUG: $message"
sleep $INTERVAL
done
Why o why doesnotify-send
ignore the timeout parameter :-/ And why is there no documentation about what the categories and stock icons are? Also, newlines are ignored and the message gets truncated.-u critical
solves that.
– Dan Dascalescu
Feb 13 at 8:36
Technicallynotify-send
does not ignore the timeout. It's the process that takes the notication as input and displays it above the desktop that decides to ignore the timeout. See also: unix.stackexchange.com/q/251243/20336
– Mikko Rantalainen
Feb 13 at 14:11
add a comment |
Updated version of the script which works with free from procps-ng 3.3.10
#!/bin/bash
#Minimum available memory limit, MB
THRESHOLD=400
#Check time interval, sec
INTERVAL=30
while :
do
free_out=$(free -w -m)
available=$(awk '/^Mem:/print $8' <<<$free_out)
if (( $available < $THRESHOLD ))
then
notify-send -u critical "Memory is running out!" "Available memory is $available MiB"
echo "Warning - available memory is $available MiB"
fi
cat <<<$free_out
sleep $INTERVAL
done
add a comment |
Updated above script to also add details on top 3 memory-hungry processes.
See at https://github.com/romanmelko/ubuntu-low-mem-popup
Here is the script itself:
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
# If the language is not English, free will output localized text and parsing fails
LANG=en_US.UTF-8
THRESHOLD=500
INTERVAL=300
POPUP_DELAY=999999
# sleep some time so the shell starts properly
sleep 60
while :
do
available=$(free -mw | awk '/^Mem:/print $8')
if [ $available -lt $THRESHOLD ]; then
title="Low memory! $available MB available"
message=$(top -bo %MEM -n 1 | grep -A 3 PID | awk 'print $(NF - 6) " t" $(NF)')
# KDE Plasma notifier
kdialog --title "$title" --passivepopup "$message" $POPUP_DELAY
# use the following command if you are not using KDE Plasma, comment the line above and uncomment the line below
# please note that timeout for notify-send is represented in milliseconds
# notify-send -u critical "$title" "$message" -t $POPUP_DELAY
fi
sleep $INTERVAL
done
New contributor
Thank you for for contribution. The better practice here is to summarize (in this case copy) the content of the link you refer to. This way, your answer remains valid even if the link disappears.
– Marc Vanhoomissen
Mar 6 at 14:07
add a comment |
Variant using RAM available, percentages and displays desktop notifications when called by cron (i.e. loop script doesn't have to be started after reboot):
#!/usr/bin/env bash
# dbus env var required when called via cron:
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ | tr '' 'n')";
AVAIL_THRESHOLD=5
free_output=$(free)
mem_total=$(awk '/^Mem:/print $2' <<< $free_output)
mem_avail=$(awk '/^Mem:/print $7' <<< $free_output)
mem_avail_m=$(bc <<< "scale=1; $mem_avail/1024")
percent_avail=$(bc <<< "scale=1; $mem_avail*100 /$mem_total")
should_warn=$(bc <<< "$percent_avail < $AVAIL_THRESHOLD")
if (( $should_warn )); then
notify-send "Memory warning - only $percent_avail% ($mem_avail_m MB) available"
else
echo "Memory OK - $percent_avail% ($mem_avail_m MB) available"
fi
New contributor
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "89"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f234292%2fwarning-when-available-ram-approaches-zero%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
Check these scripts:
Need application/script alerting when system memory is running out
#!/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:
#!/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();
?>
1
The script works with small adaptations (I just usedavailable=$(free -m | grep Mem | awk 'print $7')
). To make notify-send work with cron, refer to anmolsinghjaggi.wordpress.com/2016/05/11/…
– morsch
Aug 15 '16 at 21:50
If the language is not English, free will output localized text and parsing fails. Then addLANG=en_US.UTF-8
at the beginnning of the bash script.
– Freddi Schiller
May 19 '17 at 10:22
add a comment |
Check these scripts:
Need application/script alerting when system memory is running out
#!/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:
#!/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();
?>
1
The script works with small adaptations (I just usedavailable=$(free -m | grep Mem | awk 'print $7')
). To make notify-send work with cron, refer to anmolsinghjaggi.wordpress.com/2016/05/11/…
– morsch
Aug 15 '16 at 21:50
If the language is not English, free will output localized text and parsing fails. Then addLANG=en_US.UTF-8
at the beginnning of the bash script.
– Freddi Schiller
May 19 '17 at 10:22
add a comment |
Check these scripts:
Need application/script alerting when system memory is running out
#!/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:
#!/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();
?>
Check these scripts:
Need application/script alerting when system memory is running out
#!/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:
#!/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();
?>
edited Apr 13 '17 at 12:23
Community♦
1
1
answered Sep 17 '13 at 19:11
StandardSpecificationStandardSpecification
1713
1713
1
The script works with small adaptations (I just usedavailable=$(free -m | grep Mem | awk 'print $7')
). To make notify-send work with cron, refer to anmolsinghjaggi.wordpress.com/2016/05/11/…
– morsch
Aug 15 '16 at 21:50
If the language is not English, free will output localized text and parsing fails. Then addLANG=en_US.UTF-8
at the beginnning of the bash script.
– Freddi Schiller
May 19 '17 at 10:22
add a comment |
1
The script works with small adaptations (I just usedavailable=$(free -m | grep Mem | awk 'print $7')
). To make notify-send work with cron, refer to anmolsinghjaggi.wordpress.com/2016/05/11/…
– morsch
Aug 15 '16 at 21:50
If the language is not English, free will output localized text and parsing fails. Then addLANG=en_US.UTF-8
at the beginnning of the bash script.
– Freddi Schiller
May 19 '17 at 10:22
1
1
The script works with small adaptations (I just used
available=$(free -m | grep Mem | awk 'print $7')
). To make notify-send work with cron, refer to anmolsinghjaggi.wordpress.com/2016/05/11/…– morsch
Aug 15 '16 at 21:50
The script works with small adaptations (I just used
available=$(free -m | grep Mem | awk 'print $7')
). To make notify-send work with cron, refer to anmolsinghjaggi.wordpress.com/2016/05/11/…– morsch
Aug 15 '16 at 21:50
If the language is not English, free will output localized text and parsing fails. Then add
LANG=en_US.UTF-8
at the beginnning of the bash script.– Freddi Schiller
May 19 '17 at 10:22
If the language is not English, free will output localized text and parsing fails. Then add
LANG=en_US.UTF-8
at the beginnning of the bash script.– Freddi Schiller
May 19 '17 at 10:22
add a comment |
Another script that I wrote for this purpose:
#!/bin/bash
# Copyright 2019, Mikko Rantalainen
# License: MIT X License
# Minimum available memory until warning, default to 10% of total RAM (MiB)
THRESHOLD=$(grep "MemTotal:" /proc/meminfo | awk ' printf "%d", 0.1*$2/1024')
INTERVAL=60s
echo "Emitting a warning if less than $THRESHOLD MiB of RAM is available..."
while true; do
meminfo=$(cat /proc/meminfo)
free=$(echo "$meminfo" | grep "MemFree:" | awk ' printf "%d", $2/1024')
available=$(echo "$meminfo" | grep "MemAvailable:" | awk ' printf "%d", $2/1024')
inactive=$(echo "$meminfo" | grep "Inactive:" | awk ' printf "%d", $2/1024')
reclaimable=$(echo "$meminfo" | grep "SReclaimable:" | awk ' printf "%d", $2/1024')
usable=$(echo "$free + $inactive / 2 + $reclaimable / 2" | bc)
if test -z "$available"; then
message="Current kernel does not support MemAvailable in /proc/meminfo, aborting"
notify-send "Error while monitoring low memory" "$message"
echo "$message" 1>&2
exit 1
fi
message="Available: $available MiB
Free: $free MiB
Maybe usable: $usable MiB"
if [ "$available" -lt "$THRESHOLD" ]
then
notify-send -u critical "Low memory warning" "$message"
echo "Low memory warning:"
echo "$message"
fi
#echo "DEBUG: $message"
sleep $INTERVAL
done
Why o why doesnotify-send
ignore the timeout parameter :-/ And why is there no documentation about what the categories and stock icons are? Also, newlines are ignored and the message gets truncated.-u critical
solves that.
– Dan Dascalescu
Feb 13 at 8:36
Technicallynotify-send
does not ignore the timeout. It's the process that takes the notication as input and displays it above the desktop that decides to ignore the timeout. See also: unix.stackexchange.com/q/251243/20336
– Mikko Rantalainen
Feb 13 at 14:11
add a comment |
Another script that I wrote for this purpose:
#!/bin/bash
# Copyright 2019, Mikko Rantalainen
# License: MIT X License
# Minimum available memory until warning, default to 10% of total RAM (MiB)
THRESHOLD=$(grep "MemTotal:" /proc/meminfo | awk ' printf "%d", 0.1*$2/1024')
INTERVAL=60s
echo "Emitting a warning if less than $THRESHOLD MiB of RAM is available..."
while true; do
meminfo=$(cat /proc/meminfo)
free=$(echo "$meminfo" | grep "MemFree:" | awk ' printf "%d", $2/1024')
available=$(echo "$meminfo" | grep "MemAvailable:" | awk ' printf "%d", $2/1024')
inactive=$(echo "$meminfo" | grep "Inactive:" | awk ' printf "%d", $2/1024')
reclaimable=$(echo "$meminfo" | grep "SReclaimable:" | awk ' printf "%d", $2/1024')
usable=$(echo "$free + $inactive / 2 + $reclaimable / 2" | bc)
if test -z "$available"; then
message="Current kernel does not support MemAvailable in /proc/meminfo, aborting"
notify-send "Error while monitoring low memory" "$message"
echo "$message" 1>&2
exit 1
fi
message="Available: $available MiB
Free: $free MiB
Maybe usable: $usable MiB"
if [ "$available" -lt "$THRESHOLD" ]
then
notify-send -u critical "Low memory warning" "$message"
echo "Low memory warning:"
echo "$message"
fi
#echo "DEBUG: $message"
sleep $INTERVAL
done
Why o why doesnotify-send
ignore the timeout parameter :-/ And why is there no documentation about what the categories and stock icons are? Also, newlines are ignored and the message gets truncated.-u critical
solves that.
– Dan Dascalescu
Feb 13 at 8:36
Technicallynotify-send
does not ignore the timeout. It's the process that takes the notication as input and displays it above the desktop that decides to ignore the timeout. See also: unix.stackexchange.com/q/251243/20336
– Mikko Rantalainen
Feb 13 at 14:11
add a comment |
Another script that I wrote for this purpose:
#!/bin/bash
# Copyright 2019, Mikko Rantalainen
# License: MIT X License
# Minimum available memory until warning, default to 10% of total RAM (MiB)
THRESHOLD=$(grep "MemTotal:" /proc/meminfo | awk ' printf "%d", 0.1*$2/1024')
INTERVAL=60s
echo "Emitting a warning if less than $THRESHOLD MiB of RAM is available..."
while true; do
meminfo=$(cat /proc/meminfo)
free=$(echo "$meminfo" | grep "MemFree:" | awk ' printf "%d", $2/1024')
available=$(echo "$meminfo" | grep "MemAvailable:" | awk ' printf "%d", $2/1024')
inactive=$(echo "$meminfo" | grep "Inactive:" | awk ' printf "%d", $2/1024')
reclaimable=$(echo "$meminfo" | grep "SReclaimable:" | awk ' printf "%d", $2/1024')
usable=$(echo "$free + $inactive / 2 + $reclaimable / 2" | bc)
if test -z "$available"; then
message="Current kernel does not support MemAvailable in /proc/meminfo, aborting"
notify-send "Error while monitoring low memory" "$message"
echo "$message" 1>&2
exit 1
fi
message="Available: $available MiB
Free: $free MiB
Maybe usable: $usable MiB"
if [ "$available" -lt "$THRESHOLD" ]
then
notify-send -u critical "Low memory warning" "$message"
echo "Low memory warning:"
echo "$message"
fi
#echo "DEBUG: $message"
sleep $INTERVAL
done
Another script that I wrote for this purpose:
#!/bin/bash
# Copyright 2019, Mikko Rantalainen
# License: MIT X License
# Minimum available memory until warning, default to 10% of total RAM (MiB)
THRESHOLD=$(grep "MemTotal:" /proc/meminfo | awk ' printf "%d", 0.1*$2/1024')
INTERVAL=60s
echo "Emitting a warning if less than $THRESHOLD MiB of RAM is available..."
while true; do
meminfo=$(cat /proc/meminfo)
free=$(echo "$meminfo" | grep "MemFree:" | awk ' printf "%d", $2/1024')
available=$(echo "$meminfo" | grep "MemAvailable:" | awk ' printf "%d", $2/1024')
inactive=$(echo "$meminfo" | grep "Inactive:" | awk ' printf "%d", $2/1024')
reclaimable=$(echo "$meminfo" | grep "SReclaimable:" | awk ' printf "%d", $2/1024')
usable=$(echo "$free + $inactive / 2 + $reclaimable / 2" | bc)
if test -z "$available"; then
message="Current kernel does not support MemAvailable in /proc/meminfo, aborting"
notify-send "Error while monitoring low memory" "$message"
echo "$message" 1>&2
exit 1
fi
message="Available: $available MiB
Free: $free MiB
Maybe usable: $usable MiB"
if [ "$available" -lt "$THRESHOLD" ]
then
notify-send -u critical "Low memory warning" "$message"
echo "Low memory warning:"
echo "$message"
fi
#echo "DEBUG: $message"
sleep $INTERVAL
done
edited Feb 13 at 8:59
David Foerster
28.4k1366112
28.4k1366112
answered Jan 29 at 7:35
Mikko RantalainenMikko Rantalainen
612615
612615
Why o why doesnotify-send
ignore the timeout parameter :-/ And why is there no documentation about what the categories and stock icons are? Also, newlines are ignored and the message gets truncated.-u critical
solves that.
– Dan Dascalescu
Feb 13 at 8:36
Technicallynotify-send
does not ignore the timeout. It's the process that takes the notication as input and displays it above the desktop that decides to ignore the timeout. See also: unix.stackexchange.com/q/251243/20336
– Mikko Rantalainen
Feb 13 at 14:11
add a comment |
Why o why doesnotify-send
ignore the timeout parameter :-/ And why is there no documentation about what the categories and stock icons are? Also, newlines are ignored and the message gets truncated.-u critical
solves that.
– Dan Dascalescu
Feb 13 at 8:36
Technicallynotify-send
does not ignore the timeout. It's the process that takes the notication as input and displays it above the desktop that decides to ignore the timeout. See also: unix.stackexchange.com/q/251243/20336
– Mikko Rantalainen
Feb 13 at 14:11
Why o why does
notify-send
ignore the timeout parameter :-/ And why is there no documentation about what the categories and stock icons are? Also, newlines are ignored and the message gets truncated. -u critical
solves that.– Dan Dascalescu
Feb 13 at 8:36
Why o why does
notify-send
ignore the timeout parameter :-/ And why is there no documentation about what the categories and stock icons are? Also, newlines are ignored and the message gets truncated. -u critical
solves that.– Dan Dascalescu
Feb 13 at 8:36
Technically
notify-send
does not ignore the timeout. It's the process that takes the notication as input and displays it above the desktop that decides to ignore the timeout. See also: unix.stackexchange.com/q/251243/20336– Mikko Rantalainen
Feb 13 at 14:11
Technically
notify-send
does not ignore the timeout. It's the process that takes the notication as input and displays it above the desktop that decides to ignore the timeout. See also: unix.stackexchange.com/q/251243/20336– Mikko Rantalainen
Feb 13 at 14:11
add a comment |
Updated version of the script which works with free from procps-ng 3.3.10
#!/bin/bash
#Minimum available memory limit, MB
THRESHOLD=400
#Check time interval, sec
INTERVAL=30
while :
do
free_out=$(free -w -m)
available=$(awk '/^Mem:/print $8' <<<$free_out)
if (( $available < $THRESHOLD ))
then
notify-send -u critical "Memory is running out!" "Available memory is $available MiB"
echo "Warning - available memory is $available MiB"
fi
cat <<<$free_out
sleep $INTERVAL
done
add a comment |
Updated version of the script which works with free from procps-ng 3.3.10
#!/bin/bash
#Minimum available memory limit, MB
THRESHOLD=400
#Check time interval, sec
INTERVAL=30
while :
do
free_out=$(free -w -m)
available=$(awk '/^Mem:/print $8' <<<$free_out)
if (( $available < $THRESHOLD ))
then
notify-send -u critical "Memory is running out!" "Available memory is $available MiB"
echo "Warning - available memory is $available MiB"
fi
cat <<<$free_out
sleep $INTERVAL
done
add a comment |
Updated version of the script which works with free from procps-ng 3.3.10
#!/bin/bash
#Minimum available memory limit, MB
THRESHOLD=400
#Check time interval, sec
INTERVAL=30
while :
do
free_out=$(free -w -m)
available=$(awk '/^Mem:/print $8' <<<$free_out)
if (( $available < $THRESHOLD ))
then
notify-send -u critical "Memory is running out!" "Available memory is $available MiB"
echo "Warning - available memory is $available MiB"
fi
cat <<<$free_out
sleep $INTERVAL
done
Updated version of the script which works with free from procps-ng 3.3.10
#!/bin/bash
#Minimum available memory limit, MB
THRESHOLD=400
#Check time interval, sec
INTERVAL=30
while :
do
free_out=$(free -w -m)
available=$(awk '/^Mem:/print $8' <<<$free_out)
if (( $available < $THRESHOLD ))
then
notify-send -u critical "Memory is running out!" "Available memory is $available MiB"
echo "Warning - available memory is $available MiB"
fi
cat <<<$free_out
sleep $INTERVAL
done
answered Feb 28 at 10:25
Jirka HladkyJirka Hladky
1
1
add a comment |
add a comment |
Updated above script to also add details on top 3 memory-hungry processes.
See at https://github.com/romanmelko/ubuntu-low-mem-popup
Here is the script itself:
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
# If the language is not English, free will output localized text and parsing fails
LANG=en_US.UTF-8
THRESHOLD=500
INTERVAL=300
POPUP_DELAY=999999
# sleep some time so the shell starts properly
sleep 60
while :
do
available=$(free -mw | awk '/^Mem:/print $8')
if [ $available -lt $THRESHOLD ]; then
title="Low memory! $available MB available"
message=$(top -bo %MEM -n 1 | grep -A 3 PID | awk 'print $(NF - 6) " t" $(NF)')
# KDE Plasma notifier
kdialog --title "$title" --passivepopup "$message" $POPUP_DELAY
# use the following command if you are not using KDE Plasma, comment the line above and uncomment the line below
# please note that timeout for notify-send is represented in milliseconds
# notify-send -u critical "$title" "$message" -t $POPUP_DELAY
fi
sleep $INTERVAL
done
New contributor
Thank you for for contribution. The better practice here is to summarize (in this case copy) the content of the link you refer to. This way, your answer remains valid even if the link disappears.
– Marc Vanhoomissen
Mar 6 at 14:07
add a comment |
Updated above script to also add details on top 3 memory-hungry processes.
See at https://github.com/romanmelko/ubuntu-low-mem-popup
Here is the script itself:
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
# If the language is not English, free will output localized text and parsing fails
LANG=en_US.UTF-8
THRESHOLD=500
INTERVAL=300
POPUP_DELAY=999999
# sleep some time so the shell starts properly
sleep 60
while :
do
available=$(free -mw | awk '/^Mem:/print $8')
if [ $available -lt $THRESHOLD ]; then
title="Low memory! $available MB available"
message=$(top -bo %MEM -n 1 | grep -A 3 PID | awk 'print $(NF - 6) " t" $(NF)')
# KDE Plasma notifier
kdialog --title "$title" --passivepopup "$message" $POPUP_DELAY
# use the following command if you are not using KDE Plasma, comment the line above and uncomment the line below
# please note that timeout for notify-send is represented in milliseconds
# notify-send -u critical "$title" "$message" -t $POPUP_DELAY
fi
sleep $INTERVAL
done
New contributor
Thank you for for contribution. The better practice here is to summarize (in this case copy) the content of the link you refer to. This way, your answer remains valid even if the link disappears.
– Marc Vanhoomissen
Mar 6 at 14:07
add a comment |
Updated above script to also add details on top 3 memory-hungry processes.
See at https://github.com/romanmelko/ubuntu-low-mem-popup
Here is the script itself:
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
# If the language is not English, free will output localized text and parsing fails
LANG=en_US.UTF-8
THRESHOLD=500
INTERVAL=300
POPUP_DELAY=999999
# sleep some time so the shell starts properly
sleep 60
while :
do
available=$(free -mw | awk '/^Mem:/print $8')
if [ $available -lt $THRESHOLD ]; then
title="Low memory! $available MB available"
message=$(top -bo %MEM -n 1 | grep -A 3 PID | awk 'print $(NF - 6) " t" $(NF)')
# KDE Plasma notifier
kdialog --title "$title" --passivepopup "$message" $POPUP_DELAY
# use the following command if you are not using KDE Plasma, comment the line above and uncomment the line below
# please note that timeout for notify-send is represented in milliseconds
# notify-send -u critical "$title" "$message" -t $POPUP_DELAY
fi
sleep $INTERVAL
done
New contributor
Updated above script to also add details on top 3 memory-hungry processes.
See at https://github.com/romanmelko/ubuntu-low-mem-popup
Here is the script itself:
#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset
# If the language is not English, free will output localized text and parsing fails
LANG=en_US.UTF-8
THRESHOLD=500
INTERVAL=300
POPUP_DELAY=999999
# sleep some time so the shell starts properly
sleep 60
while :
do
available=$(free -mw | awk '/^Mem:/print $8')
if [ $available -lt $THRESHOLD ]; then
title="Low memory! $available MB available"
message=$(top -bo %MEM -n 1 | grep -A 3 PID | awk 'print $(NF - 6) " t" $(NF)')
# KDE Plasma notifier
kdialog --title "$title" --passivepopup "$message" $POPUP_DELAY
# use the following command if you are not using KDE Plasma, comment the line above and uncomment the line below
# please note that timeout for notify-send is represented in milliseconds
# notify-send -u critical "$title" "$message" -t $POPUP_DELAY
fi
sleep $INTERVAL
done
New contributor
edited Mar 7 at 15:08
New contributor
answered Mar 6 at 13:27
Roman MelkoRoman Melko
11
11
New contributor
New contributor
Thank you for for contribution. The better practice here is to summarize (in this case copy) the content of the link you refer to. This way, your answer remains valid even if the link disappears.
– Marc Vanhoomissen
Mar 6 at 14:07
add a comment |
Thank you for for contribution. The better practice here is to summarize (in this case copy) the content of the link you refer to. This way, your answer remains valid even if the link disappears.
– Marc Vanhoomissen
Mar 6 at 14:07
Thank you for for contribution. The better practice here is to summarize (in this case copy) the content of the link you refer to. This way, your answer remains valid even if the link disappears.
– Marc Vanhoomissen
Mar 6 at 14:07
Thank you for for contribution. The better practice here is to summarize (in this case copy) the content of the link you refer to. This way, your answer remains valid even if the link disappears.
– Marc Vanhoomissen
Mar 6 at 14:07
add a comment |
Variant using RAM available, percentages and displays desktop notifications when called by cron (i.e. loop script doesn't have to be started after reboot):
#!/usr/bin/env bash
# dbus env var required when called via cron:
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ | tr '' 'n')";
AVAIL_THRESHOLD=5
free_output=$(free)
mem_total=$(awk '/^Mem:/print $2' <<< $free_output)
mem_avail=$(awk '/^Mem:/print $7' <<< $free_output)
mem_avail_m=$(bc <<< "scale=1; $mem_avail/1024")
percent_avail=$(bc <<< "scale=1; $mem_avail*100 /$mem_total")
should_warn=$(bc <<< "$percent_avail < $AVAIL_THRESHOLD")
if (( $should_warn )); then
notify-send "Memory warning - only $percent_avail% ($mem_avail_m MB) available"
else
echo "Memory OK - $percent_avail% ($mem_avail_m MB) available"
fi
New contributor
add a comment |
Variant using RAM available, percentages and displays desktop notifications when called by cron (i.e. loop script doesn't have to be started after reboot):
#!/usr/bin/env bash
# dbus env var required when called via cron:
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ | tr '' 'n')";
AVAIL_THRESHOLD=5
free_output=$(free)
mem_total=$(awk '/^Mem:/print $2' <<< $free_output)
mem_avail=$(awk '/^Mem:/print $7' <<< $free_output)
mem_avail_m=$(bc <<< "scale=1; $mem_avail/1024")
percent_avail=$(bc <<< "scale=1; $mem_avail*100 /$mem_total")
should_warn=$(bc <<< "$percent_avail < $AVAIL_THRESHOLD")
if (( $should_warn )); then
notify-send "Memory warning - only $percent_avail% ($mem_avail_m MB) available"
else
echo "Memory OK - $percent_avail% ($mem_avail_m MB) available"
fi
New contributor
add a comment |
Variant using RAM available, percentages and displays desktop notifications when called by cron (i.e. loop script doesn't have to be started after reboot):
#!/usr/bin/env bash
# dbus env var required when called via cron:
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ | tr '' 'n')";
AVAIL_THRESHOLD=5
free_output=$(free)
mem_total=$(awk '/^Mem:/print $2' <<< $free_output)
mem_avail=$(awk '/^Mem:/print $7' <<< $free_output)
mem_avail_m=$(bc <<< "scale=1; $mem_avail/1024")
percent_avail=$(bc <<< "scale=1; $mem_avail*100 /$mem_total")
should_warn=$(bc <<< "$percent_avail < $AVAIL_THRESHOLD")
if (( $should_warn )); then
notify-send "Memory warning - only $percent_avail% ($mem_avail_m MB) available"
else
echo "Memory OK - $percent_avail% ($mem_avail_m MB) available"
fi
New contributor
Variant using RAM available, percentages and displays desktop notifications when called by cron (i.e. loop script doesn't have to be started after reboot):
#!/usr/bin/env bash
# dbus env var required when called via cron:
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ | tr '' 'n')";
AVAIL_THRESHOLD=5
free_output=$(free)
mem_total=$(awk '/^Mem:/print $2' <<< $free_output)
mem_avail=$(awk '/^Mem:/print $7' <<< $free_output)
mem_avail_m=$(bc <<< "scale=1; $mem_avail/1024")
percent_avail=$(bc <<< "scale=1; $mem_avail*100 /$mem_total")
should_warn=$(bc <<< "$percent_avail < $AVAIL_THRESHOLD")
if (( $should_warn )); then
notify-send "Memory warning - only $percent_avail% ($mem_avail_m MB) available"
else
echo "Memory OK - $percent_avail% ($mem_avail_m MB) available"
fi
New contributor
edited 2 hours ago
New contributor
answered Mar 8 at 0:06
lambfrierlambfrier
11
11
New contributor
New contributor
add a comment |
add a comment |
Thanks for contributing an answer to Ask Ubuntu!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f234292%2fwarning-when-available-ram-approaches-zero%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Four years later, looks like periodically checking
free -m
is the way to go.– Dan Dascalescu
Oct 7 '16 at 6:29