Desativar o kernel do Linux de matar o processo postgresql

5

Eu tenho uma instalação padrão 'pronta para usar'

Linux version 3.0.1.stk64 ([email protected]) (gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC) ) #1 SMP Sat Aug 13 12:53:46 EDT 2011

Tem o postgresql 8.4 instalado como (script de início)

/etc/init.d/postgresql

Diretório de dados

/etc/postgresql/8.4/main/

Meu problema é que às vezes o Kernel decide matar alguns dos processos do Postgresql em momentos de pouca memória. Eu gostaria de informar ao kernel que o Postgresql não deve ser escolhido para ser morto. Eu li da documentação postgresql ( link ) que uma linha de comando echo -17 > /proc/self/oom_adj pode ser usada para evitar a morte.

Eu tentei adicionar esta linha de comando ao script /etc/init.d/postgresql , mas realmente não sei onde colocá-lo lá.

Quaisquer sugestões sobre como proceder? O scipt ( /etc/init.d/postgresql ) pelo caminho é:

#!/bin/sh
set -e

### BEGIN INIT INFO
# Provides:             postgresql
# Required-Start:       $local_fs $remote_fs $network $time
# Required-Stop:        $local_fs $remote_fs $network $time
# Should-Start:         $syslog
# Should-Stop:          $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    PostgreSQL RDBMS server
### END INIT INFO

# Setting environment variables for the postmaster here does not work; please
# set them in /etc/postgresql/<version>/<cluster>/environment instead.

[ -r /usr/share/postgresql-common/init.d-functions ] || exit 0

. /usr/share/postgresql-common/init.d-functions

# versions can be specified explicitly
if [ -n "$2" ]; then
    versions="$2 $3 $4 $5 $6 $7 $8 $9"
else
    get_versions
fi

case "$1" in
    start|stop|restart|reload|status)
        for v in $versions; do
            $1 $v
        done
        ;;
    force-reload)
        for v in $versions; do
            reload $v
        done
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|reload|force-reload|status} [version ..]"
        exit 1
        ;;
esac

exit 0
    
por Martin 25.10.2012 / 17:59

1 resposta

3

Você deve ajustar o oom_adj diretamente ao postmaster pid, adicionar linhas como esta (NOT TESTED):

pid='cat $PGDATA/postmaster.pid | head -1'
echo -17 > /proc/$pid/oom_adj
    
por 25.10.2012 / 18:16