信号量-Apache No space left on device Couldn’t create accept lock

生产机器apache无故停掉,再次启动apache,报错,Apache不能启动,提示:

“ [emerg] (28)No space left on device: Couldn't create accept lock (/usr/local/apache2/logs/accept.lock.10396)”

手动启动内部服务器的apache时,没启动成功,看了下/var/log/httpd/error_log,有如下错误:

“[Mon Aug 06 09:32:20 2012] [emerg] (28)No space left on device: Couldn’t create accept lock (/etc/httpd/logs/accept.lock.6399) (5)”

开始根据提示去找磁盘空间不足,发现磁盘空间充足,所以这里的“no space”不是指磁盘空间。

后来发现原因是一些IPC的资源占用问题,先用”ipcs”命令查一下当前用于已经使用了的信号量集合(semaphore sets),再用“sysctl”命令查询一下每个用户最多可使用的信号量,发现基本上占用完了,不能给新的apache进程使用了(尽管没有完全占满,但是httpd.conf文件中写了已开始启动8个server进程的,确实不够分配)。

[root@vmm-web ~]# ipcs -s | grep apache

0x00000000 10649601 apache 600 1

0x00000000 10616834 apache 600 1 

........

#有很多,大约有120行;当然如果不是apache用户账号启动的apache,需要根据实际情况灵活变通;

[root@vmm-web ~]# sysctl kernel.sem     #查看系统信号量

kernel.sem = 250  32000  32  128

已经确定apache这个账号下的semaphores是不用了(除了给我的HTTPD服务器),所以只需要用“ipcrm -s”命令kill掉这些semaphore array即可。

解决步骤:

1)切换到root账号,先用下面的这个命令检查一下哪个用户的信号量比较多:

#ipcs -a 或者#ipcs -s

2)然后关掉那个用户的apache,用下面这个命令删除信号量(注意修改用户名):

#ipcs -s | grep username| awk '{ print $2 }' | xargs -n 1 ipcrm -s

3)最后重启Apache,问题解决。

备注用法:

 ipcrm [options]

 ipcrm [...]

选项:

 -m, --shmem-id        按 id 号移除共享内存段

 -M, --shmem-key       按键值移除共享内存段

 -q, --queue-id        按 id 号移除消息队列

 -Q, --queue-key       按键值移除消息队列

 -s, --semaphore-id    按 id 号移除信号量

 -S, --semaphore-key  按键值移除信号量

 -a, --all[=]  全部移除

 -v, --verbose              解释正在进行的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值