前几天启动apache,总是失败,提示“本地计算机上的APACHE服务启动后又停止了.一些自动停止,如果它们没有什么可做的,例如性能日记和报警服务”
APACHE服务器突然出现异常,症状表现为apache.exe父进程不断产生和停止一个子进程apache.exe,内存被大量占用,导致服务器无法访问。无奈之下在网上找解决方案,查找到有朋友也遇到过类似情况,该网友是通过修改apache配置文件中“MaxRequestsPerChild:一个服务进程允许的最大请求数”的值来解决的,默认情况下该值为0,改成100问题解决。但是我按照他的方法并不能解决自己的问题,可见虽然我们症状相同,但是问题的本质不同,我又在网上查了很多资料,配置文件被改的乱七八糟问题依然没有解决。apache服务器被重新安装了几十次也没有用,无奈之下把系统重装了,然后安装apache,终于恢复正常了。由此可见问题不是由配置错误而引起的,虽然不知道具体原因,但是既然问题解决了就算了。可是没过几天相同的问题又出现了,我已经快要崩溃了,这样要我如何学习PHP。于是决定找出问题的起因,网上搜遍了资料也没解决问题,后来只能在apache日志中找答案了,在日志中发现如下信息:
[SunSep2411:13:362006][notice]Apache/2.0.59(Win32)PHP/5.0.3configured--
resumingnormaloperations
[SunSep2411:13:362006][notice]Serverbuilt:Jul27200615:55:03
[SunSep2411:13:362006][notice]Parent:Createdchildprocess1736
[SunSep2411:13:362006][notice]Child1736:Childprocessisrunning
[SunSep2411:13:362006]crit提供了一个无效的参数。:Child1736:
setup_inherited_listeners(),WSASocketfailedtoopentheinheritedsocket.
[SunSep2411:13:362006][error]Parent:childprocessexitedwithstatus3--
Aborting.
此信息大量重复,基本意思是apache.exe父进程产生了一个apache.exe子进程-子进程开始运行-子进程函数setup_inherited_listeners()错误,WSASocket打开inheritedsocket失败-子进程以异常中断状态退出,显然问题的关键在:
[SunSep2411:13:362006]crit提供了一个无效的参数。:Child1736:
setup_inherited_listeners(),WSASocketfailedtoopentheinheritedsocket.
不是很懂这个函数干什么的,为什么会发生错误,这个估计只有apache开发人员才知道了。但是看到socket这个词还比较敏感,因为很多病毒流氓软件都喜欢在winsock里面做文章,关于winsock的描叙,在百度中有一段这样的描叙:
“WinSock是WindowsSockets的缩写,它作为Windows和TCP/IP之间的接口。而我们都知道TCP/IP在互联网举足轻重的作用,如果希望了解Socket,那么BerkeleySocket不可不提,它是在UNIX下对TCP/IP进行编程的标准模式。WinSock的设计和它很象,这样可以使UNIX上的应用程序在Windows平台上使用。但是,两者也有一些区别,如WinSocket利用了Windows的一些特点,而这些特点对于UNIX来说是没有的。”
于是抱着试一试的心态检查了一下自己电脑winsock中的文件,这里用的是工具hijackthis(一款国外软件,在反病毒界比较流行,主要用来对系统中病毒喜欢修改的地方进行扫描),果然在hijackthis的日志中发现这个项目:
O10-UnknownfileinWinsockLSP:c:\windows\system32\tcpipdog0.dll
在百度中搜索dll文件名,发现这个东西是DR.com(网络管理软件,学校用这个来管理校园网)插入在系统中的,难道这个就是问题所在,此10项无法直接用hijackthis删除,于是我就用专门删除winsock中文件的工具:LSPfix.exe把该文件删除。当然删除winsock中的文件会有一定的风险,可能造成无法上网的现象,如果删除后无法上网,需要用软件:WinsockxpFix.exe修复winsock。一切完成之后,apache服务器正常运行了,问题终于解决了,心情好多了。但是我不能在用这个DR.COM了,一旦再次使用,winsock中又会被插入文件,那么apache又出问题。郁闷了,我总不能不上网吧,看来只有每次开机后手动修改tcp/ip属性,再启动apache了。具体方法可以在以前的日志中找!
总结:在winsock中插文件的不一定就是DR.COM,很多软件都可能在其中插入文件,所以造成apache服务器异常的原因会很多,但是这类问题总体来说应该还算是软件的冲突。为什么这类软件会引起apache服务器异常,这个还需要专业人员来解答。