diff options
Diffstat (limited to 'contrib/start-scripts/linux')
-rw-r--r-- | contrib/start-scripts/linux | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/contrib/start-scripts/linux b/contrib/start-scripts/linux index b950cf512c..2dff0094cd 100644 --- a/contrib/start-scripts/linux +++ b/contrib/start-scripts/linux @@ -42,15 +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. If you enable this, you probably -# want to compile PostgreSQL with "-DLINUX_OOM_SCORE_ADJ=0", so that -# individual backends can still be killed by the OOM killer. -#OOM_SCORE_ADJ=-1000 +# 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, enable this and compile with "-DLINUX_OOM_ADJ=0". -#OOM_ADJ=-17 +# /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 @@ -77,14 +79,20 @@ 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 - su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1 + 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" ;; stop) @@ -95,9 +103,8 @@ 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 - su - $PGUSER -c "$DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1 + 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" ;; reload) |