大体解决思路有这么几种:
1 apache与服务器的杀毒软件和防火墙冲突,导致了windows的sock api失败
2 和dhcp或者动态dns有关系
3 通过apache的配置来解决
4 php的bug带来的问题
通过一段时间的排查,应该说基本能确认不是前两点问题。那么如何通过配置来解决呢,因为频繁出现的这个问题还导致了apache性能的下降,更不能容忍的是,我们不清楚什么时候apache会出现memory leak。
因此参考了国外网友的经验,在配置文件里面对以下几项开关选项做了设置:
Win32DisableAcceptEx
EnableMMAP Off
EnableSendfile Off
这个方法的处理过程可以参见apache的bug 21425。acceptex
问题还没有结束,因为之前配置过Win32DisableAcceptEx开关,打开之后会出现这个问题:
FATAL: erealloc(): Unable to allocate 98304 bytes
如何解决这个问题呢?这里还有解决方法:
将ThreadsPerChild选项从默认的250或者更多,降至170以下。
ThreadsPerChild 170
这样配置之后,这两个问题都不出现了。acceptexlog里面不再有error和warn了。
最后我还到php的官方buglist里面确认了一下,应该说最新版本的php应该不会出现一些影响apache这个问题的可能。这样,经过下午的观测,到现在为止apache工作还算正常。
我用第一种方法就解决了问题
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-22858-3.html
x)全新回归#