Thread: Shared memory errors during initdb in Mac OS X

Shared memory errors during initdb in Mac OS X

From
John Siracusa
Date:
Here's the error and the helpful advice:

---

% /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
The files belonging to this database system will be owned by user
"postgres".
This user must also own the server process.
[...]
creating configuration files... ok
creating template1 database in /usr/local/pgsql/data/base/1... FATAL:  could
not create shared memory segment: Invalid argument
DETAIL:  Failed system call was shmget(key=1, size=1081344, 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 1081344 bytes), reduce PostgreSQL's
shared_buffers parameter (currently 50) and/or its max_connections parameter
(currently 10).
        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.

initdb: failed

---

Of course, I'v already set all the shared memory params, and have been
runing 7.4.1 quite successfully with them.  Immediately after the error
above, I ran this to check the values:

% sysctl -a | egrep shm
kern.sysv.shmmax: 10485760
kern.sysv.shmmin: 1
kern.sysv.shmmni: 10240
kern.sysv.shmseg: 4096
kern.sysv.shmall: 33554432

Since 1081344 is less than 10485760, I'm not sure what to do.  I'd take the
error message' advice and adjust shared_buffers or max_connections, but
those params don't even exist yet since initdb is supposed to create the
postgres.conf file that they're found in.

Any suggestions?  What should I try next?

-John


Re: Shared memory errors during initdb in Mac OS X

From
John Siracusa
Date:
On 3/22/04 1:45 PM, John Siracusa wrote:
> Of course, I'v already set all the shared memory params, and have been runing
> 7.4.1 quite successfully with them.  Immediately after the error above, I ran
> this to check the values:
>
> % sysctl -a | egrep shm
> kern.sysv.shmmax: 10485760
> kern.sysv.shmmin: 1
> kern.sysv.shmmni: 10240
> kern.sysv.shmseg: 4096
> kern.sysv.shmall: 33554432
>
> Since 1081344 is less than 10485760, I'm not sure what to do.  I'd take the
> error message' advice and adjust shared_buffers or max_connections, but those
> params don't even exist yet since initdb is supposed to create the
> postgres.conf file that they're found in.
>
> Any suggestions?  What should I try next?

Okay, I changed the settings to this:

kern.sysv.shmmax: 268435456
kern.sysv.shmmin: 1
kern.sysv.shmmni: 10240
kern.sysv.shmseg: 4096
kern.sysv.shmall: 65536

and then restarted.  Now it works, but I'm not sure if it was the change in
settings or the restart that fixed it.  Obviously I had to restart to make
the changes take effect, but my theory before I bit the bullet and restarted
was that some stale shared memory was lurking, making too little available
for Postgres.  I wanted to clean it out using ipcs, but that command doesn't
seem to exist in OS X.  (Incidentally, Postgres's ipcclean command doesn't
work on OS X due to the lack of an ipcs command.)

This leads to me next question: is there an equivalent to the ipcs command
for Mac OS X?

-John


Re: Shared memory errors during initdb in Mac OS X

From
Tom Lane
Date:
John Siracusa <siracusa@mindspring.com> writes:
> and then restarted.  Now it works, but I'm not sure if it was the change in
> settings or the restart that fixed it.  Obviously I had to restart to make
> the changes take effect, but my theory before I bit the bullet and restarted
> was that some stale shared memory was lurking, making too little available
> for Postgres.

I was wondering about that as I read your message, but my recollection
is that you get a different kernel error code (not "Invalid argument")
if the request size would be legal by itself but is rejected due to
other pre-existing allocations.  You might want to try deliberately
provoking such a situation and see what error you get.

> This leads to me next question: is there an equivalent to the ipcs command
> for Mac OS X?

Not that I've found.  It's a very annoying omission :-(.  I'm not sure
if Darwin is sufficiently BSD-ish that it would work to compile up ipcs
from one of the BSD distributions, but you could try ...

            regards, tom lane

Re: Shared memory errors during initdb in Mac OS X

From
Jerry LeVan
Date:
The default allocation of shared memory on mac os x is a bit small from
/etc/rc: sysctl -w kern.sysv.shmmax=4194304

I ran into a problem when I tried to do a make test on the distribution,
there is not enought shared memory for two instances.

I googled and found an ipcs package that I was able to compile with just
a little bit of finagling here is the output:

macjerry:/Library/StartupItems root# ipcs -b
SVID messages facility not configured in the system
Shared Memory:
T     ID     KEY        MODE       OWNER    GROUP  SEGSZ
m  65536    5432001 --rw------- postgres    staff 3809280

Semaphores:
T     ID     KEY        MODE       OWNER    GROUP NSEMS

You might want to increase shmmax in /etc/rc

==Jerry

On Mar 22, 2004, at 4:02 PM, Tom Lane wrote:

> John Siracusa <siracusa@mindspring.com> writes:
>> and then restarted.  Now it works, but I'm not sure if it was the
>> change in
>> settings or the restart that fixed it.  Obviously I had to restart to
>> make
>> the changes take effect, but my theory before I bit the bullet and
>> restarted
>> was that some stale shared memory was lurking, making too little
>> available
>> for Postgres.
>
> I was wondering about that as I read your message, but my recollection
> is that you get a different kernel error code (not "Invalid argument")
> if the request size would be legal by itself but is rejected due to
> other pre-existing allocations.  You might want to try deliberately
> provoking such a situation and see what error you get.
>
>> This leads to me next question: is there an equivalent to the ipcs
>> command
>> for Mac OS X?
>
> Not that I've found.  It's a very annoying omission :-(.  I'm not sure
> if Darwin is sufficiently BSD-ish that it would work to compile up ipcs
> from one of the BSD distributions, but you could try ...
>
>             regards, tom lane
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to
> majordomo@postgresql.org)
>


Re: Shared memory errors during initdb in Mac OS X

From
John Siracusa
Date:
On 3/22/04 4:20 PM, Jerry LeVan wrote:
> I googled and found an ipcs package that I was able to compile with just
> a little bit of finagling

Can you put the patched source up on the web somewhere, or post the patch to
the list along with a URL for the original source?

-John