Apache启动错误No space left on device的处理
以前的某次重启apache时,就遇到过这个问题,并解决了
没想到,昨天又碰到了此问题,第一反映还是用df查看空间
结果各个区的空间都正常,没有满
实在想不起来是怎么处理的了,于是又Google了一把如下:
系统的信号量可能用完了,造成apache启动时无法获取相应的信号量
貌似apache是使用信号量同它的子进程通信的
使用如下命令查看当前的系统已经使用的信号量
折叠复制代码
- ipcs -s
- ------ Semaphore Arrays --------
- key semid owner perms nsems
- 0x00000000 6684672 daemon 600 1
- 0x00000000 6750209 daemon 600 1
- 0x00000000 6782978 daemon 600 1
- ......
使用如下命令来查看当前内核支持的最大信号量
折叠复制代码
- ipcs -l
- ------ Semaphore Limits --------
- max number ofarrays=128
- max semaphores perarray=250
- max semaphores systemwide=32000
- max ops per semopcall=32
- semaphore maxvalue=32767
如下脚本来清除当前被占用的信号量,其中daemon是apache启动时对应的owner
折叠复制代码
- for i in `ipcs -s | awk '/daemon/ {print $2}'`; do (ipcrm -s $i); done
然后,再重启apache就可以了
通过编辑/etc/sysctl.conf文件,可以修改系统的信号量
折叠复制代码
- kernel.msgmni=1024
- kernel.sem=2503200032 128
其中,250为每个信号集中的最大信号量数目,32000为系统范围内的最大信号量总数目
32为每个信号发生时的最大系统操作数目,128为系统范围内的最大信号集总数目
然后,使用sysctl -p命令来使修改的参数生效