Ошибка postgresql с приведенной ниже ошибкой на lion os x

 Failed system call was shmget(key=5432001, size=16498688, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 16498688 bytes), reduce PostgreSQL's shared_buffers parameter (currently 1536) and/or its max_connections parameter (currently 104).
    If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    The PostgreSQL documentation contains more information about shared memory configuration.

4 ответа

Решение

Это связано с параметром Shared Memory (shared_buffers) в файле конфигурации PostgreSQL. В Linux также есть настройки, ограничивающие объем памяти, который может запрашивать приложение. Эти настройки хранятся в трех файлах:

/ Труды / SYS / ядро ​​/ SHMALL

/ Труды / SYS / ядро ​​/ SHMMAX

/ Труды / SYS / ядро ​​/ SHMMNI

Один или несколько из этих файлов необходимо изменить или использовать исполняемый файл "sysctl". Попросите вашего системного администратора сделать это. Сообщение об ошибке говорит вам, какие значения должны быть. После этого PostgreSQL сможет правильно запускаться.

Если вы не можете изменить значения, уменьшите параметр shared_buffers до точки, где он находится ниже порогового значения

Вы можете установить память для текущего сеанса, используя команды:

sudo sysctl -w kern.sysv.shmmax=16777216
sudo sysctl -w kern.sysv.shmall=4096

Что позволит Postgres начать.

Чтобы сделать это при перезапуске, вам нужно создать или отредактировать файл /etc/sysctl.conf включать:

kern.sysv.shmmax=16777216
kern.sysv.shmall=4096

Редактирование /etc/sysctl.conf и перезапуск сделали свое дело для меня:

kern.sysv.shmmax=1610612736
kern.sysv.shmmin=1
kern.sysv.shmmni=256
kern.sysv.shmseg=64
kern.sysv.shmall=393216

Как ни странно, установщик PostgreSQL уже пожаловался на неправильные настройки общей памяти и предложил изменить sysctl.conf, Но, видимо, значения для shmmax а также shmall были еще слишком маленькими.

Как упоминает Ортвин, вам нужно отредактировать файл /etc/sysctl.conf. Этот файл на самом деле не существует в чистой установке Mac OS/X Lion, вам нужно его создать. Перечисленные выше параметры приемлемы для большой машины - для общей памяти выделяется до 1,5 ГБ. Если у вас есть только 2 ГБ, вы можете использовать меньше, чем это.

На моем Mac я выделяю 256 МБ общей памяти со следующей строкой:

kern.sysv.shmmax=268435456

Вот две ссылки, которые я нашел полезными при исследовании этого:

http://www.spy-hill.net/help/apple/SharedMemory.html - обсуждает совместную память о Дарвине

а также

http://archives.postgresql.org/pgsql-patches/2006-02/msg00176.php

дает некоторую историю этой проблемы в отношении postgresql.

Другие вопросы по тегам