> Today I run http_load to do some benchmark of my Web-DB application
> and found that under high load (it was about 18 postgres running ) postsmaster failed.
> Restarting postmaster produces error:
>
> IpcMemoryCreate: shmget failed (Identifier removed) key=5432010, size=24588, permission=700
> IpcMemoryIdGet: shmget failed (Identifier removed) key=5432010, size=24588, permission=0
> IpcMemoryAttach: shmat failed (Invalid argument) id=-2
> FATAL 1: AttachSLockMemory: could not attach segment
>
> I checked shared memory:
> 23:27[zeus]:~>ipcs -a
>
> ------ Shared Memory Segments --------
> shmid owner perms bytes nattch status
> 10496 postgres 700 24588 5 dest
> 10497 postgres 600 8852184 5 dest
> 10498 postgres 600 96804 5 dest
>
> ------ Semaphore Arrays --------
> semid owner perms nsems status
>
> ------ Message Queues --------
> msqid owner perms used-bytes messages
>
> Does this error means I need to increase shared memory ?
> My setup: Linux 2.0.36, Dual PPRO, 256 Mb RAM
> Postgres 6.4.2
I don't think so unless you increased the shared buffer size using -B
option. Stock 6.4.2 is very buggy with the shared memory
usage. Probably it's the cause. Try Tom Lane's fix or 6.5b. I have
tested 6.5b with 128 backends running and it seems very stable.
Another possibility is you don't have enough file descriptors.
What do you get by:
$ cat /proc/sys/kernel/file-max
1024 or so is not enough. You could increase it by:
echo 4096 > /proc/sys/kernel/file-max
Decreasing the usage of file descriptors per backend is also a good idea.
try:
ulimit -n 20
before starting postmaster.
---
Tatsuo Ishii