打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
apache的MaxRequestsPerChild指令设置不合理导致apache崩潰
apache的MaxRequestsPerChild指令设置不合理导致并发连接过高
 
服务器负荷增大,尝试优化和调整服务器,首先是从 Apache 的优化和调整开始的。之前考虑到我们的生产机负荷并不大,因此可以让apache的每一个派生子进程都尽可能处理更多的请求再释放,这样有利于促进子进程的复用,从而提高处理效率。于是我将apache的MaxRequestsPerChild参数调整为4000,一直大半年相安无事。
但是今天却出现了一个问题,网站突然打不开了,症状是浏览器始终处于正在打开网页的状态。检查后排除了DDoS攻击的可能。再查看apache进程,居然没有!赶紧查看apache错误日志/var/log/httpd/error_log,发现了以下错误日志:

[Tue May 08 12:21:22 2012] [alert] (11)Resource temporarily unavailable: setuid: unable to change to uid: 48
[Tue May 08 12:21:23 2012] [alert] Child 8762 returned a Fatal error... Apache is exiting!
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (43)Identifier removed: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (22)Invalid argument: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (22)Invalid argument: couldn't grab the accept mutex
[Tue May 08 12:21:24 2012] [emerg] (22)Invalid argument: couldn't grab the accept mutex
[Tue May 08 12:21:25 2012] [emerg] (22)Invalid argument: couldn't release the accept mutex
[Tue May 08 15:39:47 2012] [emerg] (22)Invalid argument: couldn't grab the accept mutex
[Tue May 08 15:39:47 2012] [emerg] (22)Invalid argument: couldn't grab the accept mutex
[Tue May 08 15:39:47 2012] [emerg] (22)Invalid argument: couldn't grab the accept mutex
[Tue May 08 15:39:47 2012] [emerg] (22)Invalid argument: couldn't grab the accept mutex
.
.
.
 
从时间上看,正是这次故障发生的时间点。重新启动apache后恢复正常。最后发现是 MaxRequestsPerChild 参数设置不合理。再次仔细阅读 Apache 手册关于 MaxRequestsPerChild 的说明后,认为在 prefork 下,KeepAlive 开启的情况下,每一个新连接都会导致一个 Apache 子进程开启, MaxRequestsPerChild 设置过大,导致新连接产生新的子进程后,长期空闲 ,这样并不一定合理。

根据我们网站的访问情况,其实远远不需要那么大的 MaxRequestsPerChild 值,每个用户点击网站的频率也不会很高,所以 MaxRequestsPerChild 设置得太高了反而适得其反,相反应该尽快释放连接,尽快回收系统资源,以尽可能快速的满足新的请求的连接需要。于是将 MaxRequestsPerChild 重新调整为64,估计不会再有这个问题产生了,具体情况是否如此还需要长期的观察。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
mac 上nginx的错误 nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
闲扯Nginx的accept
地道美语杂烩 (5)
Day 364  Thursday口语主题<62>用情态动词can和could造句 结构: I can..., but I couldn’t ... 过去的时间。
學會Say No
httpd.conf中文说明
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服