37 lines
880 B
Bash
Executable File
37 lines
880 B
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Reports Linux OOM Killer activity
|
|
#
|
|
set -e
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
# shellcheck source=scripts/oom-score-adj.sh
|
|
source oom-score-adj.sh
|
|
|
|
# shellcheck source=scripts/configure-metrics.sh
|
|
source configure-metrics.sh
|
|
|
|
[[ $(uname) = Linux ]] || exit 0
|
|
|
|
syslog=/var/log/syslog
|
|
[[ -r $syslog ]] || {
|
|
echo Unable to read $syslog
|
|
exit 1
|
|
}
|
|
|
|
# Adjust OOM score to reduce the chance that this script will be killed
|
|
# during an Out of Memory event since the purpose of this script is to
|
|
# report such events
|
|
oom_score_adj "self" -500
|
|
|
|
while read -r victim; do
|
|
echo "Out of memory event detected, $victim killed"
|
|
./metrics-write-datapoint.sh "oom-killer,victim=$victim,hostname=$HOSTNAME killed=1"
|
|
done < <( \
|
|
tail --follow=name --retry -n0 $syslog \
|
|
| sed --unbuffered -n "s/^.* earlyoom\[[0-9]*\]: Killing process .\(.*\). with signal .*/\1/p" \
|
|
)
|
|
|
|
exit 1
|