Apache and System V IPCs
Apache and some other programs need System V Inter-Process Communication (IPC) enabled in the Linux kernel.
If you get this error when starting Apache:
[emerg] (38)Function not implemented: Couldn't create accept lock
|
then it is possible that System V IPC is not enabled. If you are creating a custom Linux kernel, the option you want to enable System V IPC is:
The proc filesystem, if enabled on your kernel, will list the semaphore usage. With Apache off:
root:/proc/sysvipc# cat sem
key semid perms nsems uid gid cuid cgid otime ctime
|
Let's start Apache:
root:/proc/sysvipc# /usr/local/apache2/bin/apachectl start
|
Now we see some usage:
root:/proc/sysvipc# cat sem
key semid perms nsems uid gid cuid cgid otime ctime
0 98304 600 1 1001 4294967295 0 0 0 1241364839
root:/proc/sysvipc#
|
The uid should match the uid of the process running Apache.
Another way to check is with the ipcs command:
root:/proc/sysvipc# ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems
0x00000000 98304 apache 600 1
root:/proc/sysvipc#
|
Note that there are resources associated with System V IPCs, and that a heavily used server can run out of these resources and throw a similar error. Specifically, you might see an error like "No space left on device: Couldn't create accept lock". This may be because the limit on semaphores had been reached and you need to set this at a higher number or free up some semaphores. You can use the ipcs -u command to list a summary of all related resources:
root:/proc/sysvipc# ipcs -u
------ Shared Memory Status --------
segments allocated 10
pages allocated 960
pages resident 833
pages swapped 0
Swap performance: 0 attempts 0 successes
------ Semaphore Status --------
used arrays = 1
allocated semaphores = 1
------ Messages: Status --------
allocated queues = 0
used headers = 0
used space = 0 bytes
root:/proc/sysvipc#
|
|
|