summaryrefslogtreecommitdiff
path: root/contrib/start-scripts/linux
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/start-scripts/linux')
-rw-r--r--contrib/start-scripts/linux35
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)