排查思路
1 查看报错信息
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
提示可以通过 systemctl status httpd.service 和 journalctl 命令 加 -xe 参数查看一些信息
但是通过查看这两个的报错并没有找到有效的信息
2通过查看错误日志 error.log
发现如下报错[Wed May 23 20:01:24.720939 2018] [core:emerg] [pid 5103] (28)No space left on device: AH00023: Couldn't create the rewrite-map mutex
通过百度发现是 ipc不足
(1) 确认是否是硬盘空间不足;结果发现不是空间的问题;
(2) 网上查看了下,发现是ipc不足。可以使用ipcs -s(|grep apache的group)
Apache can create the "accept lock" is with a semaphore. A semaphore is an inter-process communication tool that is used by Apache to communicate with it's child processes. This error message may mean that Apache couldn't create a new semaphore.
解决办法
使用ipc -s 查看果然zabbix占用了太多的ipc空间
处理:
(1) 可以使用$ ipcrm -s <semid>清理指定 semaphore
但是一个个删除太慢了
(2) 也可以使用下面命令,清理所有的semaphore, 注:替换nobody为apache对应的用户名
for semid in `ipcs -s | grep nobody | cut -f2 -d" "`;
do ipcrm -s $semid; done
改为 for semid in `ipcs -s ` | grep zabbix | cut -f2 "";
do ipcrm -s $semid; done
清除掉所有的semid
重新启动httpd 启动成功
IPC介绍:
IPC进程间通信(Inter-Process Communication)就是指多个进程之间相互通信,交换信息的方法。Linux IPC基本上都是从Unix平台上继承而来的。主要包括最初的Unix IPC,System V IPC以及基于Socket的IPC。另外,Linux也支持POSIX IPC。
IPC具体包含:(1)信号量,用来管理对共享资源的访问 (2)共享内存,用来高效地实现进程间的数据共享 (3)消息队列,用来实现进程间数据的传递。我们把这三种工具统称为System V IPC的对象,每个对象都具有一个唯一的IPC标识符(identifier)。要保证不同的进程能够获取同一个IPC对象,必须提供一个IPC关键字(IPC key),内核负责把IPC关键字转换成IPC标识符。 使用ipcs命令可以查看当前使用情况,使用ipcs -l查看系统配置参数。