很久以前,在centos6.5上有一个httpd和一个每天restart的脚本(直接kill -9 httpd再service httpd restart)。

某日,httpd 被kill之后,就没有restart成功,/var/log/httpd/error_log中只有一句话:


configuration failed.
 

root用户人工去重启它,也是如此报错。。。把log level设置成debug,仍然只有这一句错误提示。。。差点抓狂了…

最后google到了答案:


ipcs -s | grep apache | awk '{print $2;}' | while read -r line; do ipcrm sem "$line"; done

【注意:上面的apache 是启动用户,有些测试环境直接用root启动的,要更换成root用户名】


 

大致是由于 kill -9导致apache未释放Semaphore Arrays,长期积累下来,达到一定程度之后,再申请新的semaphore array就会失败。只是这个出错提示实在是太2了。


[root@www httpd]# ipcs -l

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 4194303
max total shared memory (kbytes) = 1073741824
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767

------ Messages: Limits --------
max queues system wide = 1378
max size of message (bytes) = 65536
default max size of queue (bytes) = 65536