monitor_memory_usage ()
{
- # If monitoring free memory then calculate how much there is
- if [ -n "$CTDB_MONITOR_FREE_MEMORY_WARN" -o \
- -n "$CTDB_MONITOR_FREE_MEMORY" ] ; then
- free_mem=$(free -m | awk '$2 == "buffers/cache:" { print $4 }')
+ if [ -z "$CTDB_MONITOR_FREE_MEMORY_WARN" -a \
+ -z "$CTDB_MONITOR_FREE_MEMORY" -a \
+ "$CTDB_CHECK_SWAP_IS_NOT_USED" != "yes" ] ; then
+ return
fi
+ _meminfo=$(get_proc "meminfo")
+ set -- $(echo "$_meminfo" | awk '
+$1 == "MemFree:" { memfree += $2 / 1024 }
+$1 == "Cached:" { memfree += $2 / 1024 }
+$1 == "Buffers:" { memfree += $2 / 1024 }
+$1 == "MemTotal:" { memtotal = $2 / 1024 }
+$1 == "SwapFree:" { swapfree = $2 / 1024 }
+$1 == "SwapTotal:" { swaptotal = $2 / 1024 }
+END {
+ print int(memfree), int(memtotal), int(swapfree) , int(swaptotal)
+}')
+ _mem_free="$1"
+ _mem_total="$2"
+ _swap_free="$3"
+ _swap_total="$4"
+
# Shutdown CTDB when memory is below the configured limit
if [ -n "$CTDB_MONITOR_FREE_MEMORY" ] ; then
- if [ $free_mem -le $CTDB_MONITOR_FREE_MEMORY ] ; then
- echo "CRITICAL: OOM - ${free_mem}MB free <= ${CTDB_MONITOR_FREE_MEMORY}MB (CTDB threshold)"
+ if [ $_mem_free -le $CTDB_MONITOR_FREE_MEMORY ] ; then
+ echo "CRITICAL: OOM - ${_mem_free}MB free <= ${CTDB_MONITOR_FREE_MEMORY}MB (CTDB threshold)"
echo "CRITICAL: Shutting down CTDB!!!"
- get_proc "meminfo"
+ echo "$_meminfo"
ps auxfww
set_proc "sysrq-trigger" "m"
ctdb disable
# Warn when low on memory
if [ -n "$CTDB_MONITOR_FREE_MEMORY_WARN" ] ; then
- if [ $free_mem -le $CTDB_MONITOR_FREE_MEMORY_WARN ] ; then
- echo "WARNING: free memory is low - ${free_mem}MB free <= ${CTDB_MONITOR_FREE_MEMORY_WARN}MB (CTDB threshold)"
+ if [ $_mem_free -le $CTDB_MONITOR_FREE_MEMORY_WARN ] ; then
+ echo "WARNING: free memory is low - ${_mem_free}MB free <= ${CTDB_MONITOR_FREE_MEMORY_WARN}MB (CTDB threshold)"
fi
fi
# We should never enter swap, so SwapTotal == SwapFree.
if [ "$CTDB_CHECK_SWAP_IS_NOT_USED" = "yes" ] ; then
- set -- $(get_proc "meminfo" | awk '$1 ~ /Swap(Total|Free):/ { print $2 }')
- if [ "$1" != "$2" ] ; then
+ if [ "$_swap_total" != "$_swap_free" ] ; then
echo We are swapping:
- get_proc "meminfo"
+ echo "$_meminfo"
ps auxfww
fi
fi
if [ "$1" = "bad" ] ; then
_swap_free=" 4352"
- _mem_cached=" 112"
- _mem_free=" 468"
+ _mem_cached="108568"
else
_swap_free="$_swap_total"
- _mem_cached="1112"
- _mem_free="1468"
+ _mem_cached="1139348"
fi
export FAKE_PROC_MEMINFO="\
MemTotal: 3940712 kB
MemFree: 225268 kB
Buffers: 146120 kB
-Cached: 1139348 kB
+Cached: ${_mem_cached} kB
SwapCached: 56016 kB
Active: 2422104 kB
Inactive: 1019928 kB
SwapFree: ${_swap_free} kB
..."
- export FAKE_FREE_M="\
- total used free shared buffers cached
-Mem: 3848 3634 213 0 142 ${_mem_cached}
--/+ buffers/cache: 2379 ${_mem_free}
-Swap: 5719 246 5473"
-
export CTDB_MONITOR_FREE_MEMORY
export CTDB_MONITOR_FREE_MEMORY_WARN
export CTDB_CHECK_SWAP_IS_NOT_USED