Thread: FreeBSD SHMMAX

FreeBSD SHMMAX

From
"Michael Fork"
Date:
All,

I am trying to get Postgres running on FreeBSD and am running into problems
with shared mem.  Here is the postgres error messge:

FATAL:  could not create shared memory segment: Cannot allocate memory
DETAIL:  Failed system call was shgmet(key=5432001, size=103407616, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared
memory segment exceeded available memory or swap space.
To reduce the request size (currently 103407616 bytes), reduce PostgreSQL's
shared_buffers parameter (currently 12288) and/or its max_connections
parameter (cureently 40).
The PostgreSQL documentation contains more information about shared memory
configuration.

Here is the output of sysctl (which shows there is more shared mem available
than postgres is asking for):

bash-2.05b$ sysctl -a | grep shm
kern.ipc.shmmax: 200000000
kern.ipc.shmmin: 1
kern.ipc.shmmni: 192
kern.ipc.shmseg: 128
kern.ipc.shmall: 8192
kern.ipc.shm_use_phys: 0

and finally the IPC stats which shows nothing being used:

Message Queues:
T     ID     KEY        MODE       OWNER    GROUP

Shared Memory:
T     ID     KEY        MODE       OWNER    GROUP

Semaphores:
T     ID     KEY        MODE       OWNER    GROUP

Any ideas why postgres won't start?

Thanks.

Michael



Re: FreeBSD SHMMAX

From
Reko Turja
Date:
> I am trying to get Postgres running on FreeBSD and am running into
> problems
> with shared mem.  Here is the postgres error messge:

On my box the values defined for the kernel are as follow:

options         SHMMAXPGS=65536         #For postgreSQL
options         SEMMNI=40
options         SEMMNS=240
options         SEMUME=40
options         SEMMNU=120

If my memory serves me right these values were suggested for PgSQL in
FBSD or Postgres documentation.

and the corresponding sysctls:

kern.ipc.shmmax: 268435456
kern.ipc.shmmin: 1
kern.ipc.shmmni: 192
kern.ipc.shmseg: 128
kern.ipc.shmall: 65536

your kern.ipc.shmall seems a bit low comparing to my setup, maybe the
culprit is there. You can tune that sysctl at runtime, try if giving
it higher value helps.

-Reko