tengmuxin 2016-07-11
{我是新手,从未遇到此问题,请各位大大勿喷}
时间:2016-07-11
事由:今天早上上班突然发现公司网站出现问题。经过排查,发现是Apache出现问题。首先检查配置文件没有出问题后,启动服务发现Apache服务能启动,但是没法关闭,没法重启。这是什么原因呢?
解决办法:(出现任何问题首先要想到的就是日志)
查看httpd日志:
tail -f /var/log/httpd/error_log
果然,显示了以下报错:
[Mon Jul 11 09:04:07 2016] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) [Mon Jul 11 09:04:07 2016] [notice] Digest: generating secret for digest authentication ...
既然找到问题了,那我们就来解决呗!
关键字:suEXEC
解决办法:
输入:ipcs -s 看有没有超过5个 这命令是显示信号量集的,什么是信号量集呢? 哈哈 我也解释不清楚,自己百度吧
然后显示以下结果:
------ Semaphore Arrays -------- key semid owner perms nsems 0x00000000 0 root 600 1 0x00000000 32769 root 600 1 0x00000000 3604482 4294967295 600 1 0x00000000 3637251 4294967295 600 1 0x00000000 4784132 4294967295 600 1 0x00000000 4816901 4294967295 600 1 0x00000000 1048582 4294967295 600 1 0x00000000 229383 4294967295 600 1 0x00000000 262152 4294967295 600 1 0x00000000 491529 4294967295 600 1 0x00000000 524298 4294967295 600 1 0x00000000 557067 4294967295 600 1 0x00000000 589836 4294967295 600 1 0x00000000 1081357 4294967295 600 1 0x00000000 1114126 4294967295 600 1 0x00000000 1146895 4294967295 600 1 0x00000000 1245200 4294967295 600 1 0x00000000 1277969 4294967295 600 1 0x00000000 1638418 4294967295 600 1
执行后,显示结果把我看懵了,怎么会这么多?
哎 那就解决呗!
使用以下命令:
ipcs -s | grep apache | perl -e 'while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}'
然后再重启Apache服务就解决了。
以下是ipcs参数的详解与用法:(自己用请勿喷)
ipcs可用来显示当前Linux系统中的共享内存段、信号量集、消息队列等的使用情况。 命令示例: ipcs -a或ipc 显示当前系统中共享内存段、信号量集、消息队列的使用情况; ipcs -m 显示共享内存段的使用情况; ipcs -s 显示信号量集的使用情况; ipcs -q 显示消息队列的使用情况; ipcrm可用来删除对应的共享内存段、信号量、消息队列; 命令示例: ipcrm -s semid 删除对应的信号量集 ipcrm -m shmid 删除对应的共享内存段 ipcrm -q msqid 删除对应的消息队列 ipcrm本身只能实现单个资源的删除,利用以下命令可实现批量删除(zhangsj版权所有,呵呵): 1.ipcs -s|grep 用户名|cut -d" " -f2|xargs -n1 ipcrm -s 2.ipcs -s|awk '/用户名/{print $2}'|xargs -n1 ipcrm -s 3.ipcs -s|awk '/用户名/{system("ipcrm -s "$2)}' 4.for i in echo `ipcs|grep 用户名|cut -d" " -f2`; do ipcrm -s $i; done