Improve handling of OOM score adjustment in sample Linux start script.
Per a suggestion from Christoph Berg.
This commit is contained in:
parent
5a421a47eb
commit
f23425fa95
@ -42,18 +42,17 @@ PGLOG="$PGDATA/serverlog"
|
||||
|
||||
# It's often a good idea to protect the postmaster from being killed by the
|
||||
# OOM killer (which will tend to preferentially kill the postmaster because
|
||||
# of the way it accounts for shared memory). Setting the OOM_SCORE_ADJ value
|
||||
# to -1000 will disable OOM kill altogether, which is a good thing for the
|
||||
# postmaster, but not so much for individual backends. If you enable this,
|
||||
# also uncomment the DAEMON_ENV line, which will instruct backends to set
|
||||
# their OOM adjustments back to the default setting of zero.
|
||||
#OOM_SCORE_ADJ=-1000
|
||||
#DAEMON_ENV="PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj"
|
||||
# of the way it accounts for shared memory). To do that, uncomment these
|
||||
# three lines:
|
||||
#PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
|
||||
#PG_MASTER_OOM_SCORE_ADJ=-1000
|
||||
#PG_CHILD_OOM_SCORE_ADJ=0
|
||||
# Older Linux kernels may not have /proc/self/oom_score_adj, but instead
|
||||
# /proc/self/oom_adj, which works similarly except the disable value is -17.
|
||||
# For such a system, uncomment these two lines instead.
|
||||
#OOM_ADJ=-17
|
||||
#DAEMON_ENV="PG_OOM_ADJUST_FILE=/proc/self/oom_adj"
|
||||
# /proc/self/oom_adj, which works similarly except for having a different
|
||||
# range of scores. For such a system, uncomment these three lines instead:
|
||||
#PG_OOM_ADJUST_FILE=/proc/self/oom_adj
|
||||
#PG_MASTER_OOM_SCORE_ADJ=-17
|
||||
#PG_CHILD_OOM_SCORE_ADJ=0
|
||||
|
||||
## STOP EDITING HERE
|
||||
|
||||
@ -80,13 +79,19 @@ test -x $DAEMON ||
|
||||
fi
|
||||
}
|
||||
|
||||
# If we want to tell child processes to adjust their OOM scores, set up the
|
||||
# necessary environment variables. Can't just export them through the "su".
|
||||
if [ -e "$PG_OOM_ADJUST_FILE" -a -n "PG_CHILD_OOM_SCORE_ADJ" ]
|
||||
then
|
||||
DAEMON_ENV="PG_OOM_ADJUST_FILE=$PG_OOM_ADJUST_FILE PG_OOM_ADJUST_VALUE=$PG_CHILD_OOM_SCORE_ADJ"
|
||||
fi
|
||||
|
||||
|
||||
# Parse command line parameters.
|
||||
case $1 in
|
||||
start)
|
||||
echo -n "Starting PostgreSQL: "
|
||||
test x"$OOM_SCORE_ADJ" != x && echo "$OOM_SCORE_ADJ" > /proc/self/oom_score_adj
|
||||
test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adj
|
||||
test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE"
|
||||
su - $PGUSER -c "$DAEMON_ENV $DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
|
||||
echo "ok"
|
||||
;;
|
||||
@ -98,8 +103,7 @@ case $1 in
|
||||
restart)
|
||||
echo -n "Restarting PostgreSQL: "
|
||||
su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast -w"
|
||||
test x"$OOM_SCORE_ADJ" != x && echo "$OOM_SCORE_ADJ" > /proc/self/oom_score_adj
|
||||
test x"$OOM_ADJ" != x && echo "$OOM_ADJ" > /proc/self/oom_adj
|
||||
test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE"
|
||||
su - $PGUSER -c "$DAEMON_ENV $DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1
|
||||
echo "ok"
|
||||
;;
|
||||
|
Loading…
x
Reference in New Issue
Block a user