打开APP
userphoto
未登录

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

开通VIP
被系统日志和别人双重误导——记Apache2排错手记
userphoto

2009.05.01

关注
被系统日志和别人双重误导——记Apache2排错手记(2008-06-02 01:07:30)

文章摘要:
在Windows XP SP2下,Winsock的异常将会导致Apache 2.2.8服务无法启动(具体为httpd.exe程序无法启动),其错误日志error.log文件将会有如下提示:

[Sun Jun 01 22:38:02 2008] [crit] (OS 10022)提供了一个无效的参数。  : Child 500: setup_inherited_listeners(), WSASocket failed to open the inherited socket.
但系统日志不一定会出现该setup_inherited_listeners错误信息,反而可能会出现“httpd.exe: Could not reliably determine the server's fully qualified domain name, using xxx.xxx.xxx.xxx for ServerName     .”的错误信息,从而误导了排错方向。

如果系统能记录setup_inherited_listeners错误将会出现如下日志描述:

The Apache service named  reported the following error:
>>> (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : make_sock: could not bind to address 0.0.0.0:80     .


解决方法是修复winsock,重置为初始状态即可。如果此方法无效,还要配合在网上邻居->本地连接->属性->internet协议(TCP/IP)->属性->高级->wins标签->去掉启用LMhosts查询前的勾。

 

 

完整标题:
被系统日志和别人的双重误导——记Apache2.2.8异常错误排错手记

 

关键词:Apache,httpd,系统日志,ErrorLOG,ServerName,setup_inherited_listeners,winsock,VPN

 

正文:
傍晚刚吃完晚饭,开机,打算通过修改一下别人的论坛源代码来熟悉MySQL的语句,谁知道Apache告诉我,它罢工了,Apache服务无法启动——具体表现为httpd.exe无法启动。

 


怪了,一直用得好好的,怎么突然就出现这样的错误?赶紧去看系统日志,一排的Apache错误,都无非是这句话:

 

The Apache service named  reported the following error:
>>> httpd.exe: Could not reliably determine the server's fully qualified domain name, using xxx.xxx.xxx.xxx for ServerName
     .

 

赶紧用这句话作为检索词baidu一下,大多数都是Apache的Httpd.conf中关于ServerName的设置有问题,但同时大多数都指出,这个并不会使得Apache服务无法启动,本地调试的情况下,可以忽略该信息,以下是官方关于该错误的文档:
http://wiki.apache.org/httpd/CouldNotDetermineServerName

 

打开Httpd.conf,发现这个是被用#注释掉的一句。去掉注释并按照本地调试的目的设置为“ServerName 127.0.0.1”后,仍然无法启动。


这时候只好想到覆盖初始设置的方法,因此拿了刚装Apache时候的初始Httpd.conf文件覆盖,无效。(有趣的是,初始httpd.conf文件也是注释掉该行的)


既然覆盖都无效,那么只好卸载再重装Apache了(注意卸载后要手动删除C:\Program Files\Apache Software Foundation\Apache2.2\下的所有配置文件,默认是不删除的),结果安装到最后,一个一闪而过、提示同样的“Could not reliably determine the server's fully qualified domain name, using xxx.xxx.xxx.xxx for ServerName”错误,Apache还是无法启动。

 

由于中午没睡觉实在太累、而且也暂时想不到什么方法解决,就只好先睡个觉(即使已经是傍晚),期望一睡过后就会好。结果当然是很傻很天真,Apache服务依然无法启动。正准备重装系统的时候突然想起Apache也有自己的错误记录文件error.log(在安装目录、默认为C:\Program Files\Apache Software Foundation\Apache2.2\下的logs文件夹下),因此决定打开它来看看。

 

提示:也可通过“开始菜单\程序\Apache HTTP Server 2.2\Review Server Log Files\Review Error Log”来打开该文件。

 

找到两句:
[Sun Jun 01 22:38:02 2008] [crit] (OS 10022)提供了一个无效的参数。  : Child 500: setup_inherited_listeners(), WSASocket failed to open the inherited socket.
[Sun Jun 01 22:38:02 2008] [crit] Parent: child process exited with status 3 -- Aborting.


汗......怎么这个错误不会在系统日志上出现?这下被系统日志给彻底误导了。


赶紧用setup_inherited_listeners去google一下,结果绝大部分的解决方法是:
http://home.donews.com/donews/forum/47/2005-11/03/576764.html
1.网上邻居->本地连接->属性->internet协议(TCP/IP)->属性->高级->wins标签->去掉启用LMhosts查询前的勾.
2.控制面版->windows防火墙->高级标签->本地连接设置->服务的标签里勾选安全Web服务器(HTTPS)即可..

 

按照上面的提示,我勾掉了“启用LMhosts查询”(因为没用Windows防火墙,所以没做第二步),接着Apache终于能启动了。


高兴之际,隐隐约约不像是这样的问题,因为他们的问题是Apache占用CPU100%才会用这个方法来解决,可是我并不是这样的故障啊。
继续深挖掘,这次变换一个检索词“httpd无法启动”,终于在google找到了一篇“与众不同”的文章。
http://www.phpx.com/happy/thread-125135-1-1.html
这篇文章中,提到了是因为Windows Sockets的异常导致了Apache无法启动。看到这,大汗:枉自己以前对电脑病毒那么熟悉,怎么一个小小的winsock故障就不会想到呢......


赶紧用hijackthis检测一下,果然发现了不明winsock文件的O10。而这些文件,是前两天闲逛校图书馆资源服务的时候、安装的一个VPN服务组件。
原来,图书馆的电子资源因受IP地址的限制,目前只能被校园网内用户访问。要在非校园网内使用校园网的电子资源,则要使用虚拟专用网(简称VPN)技术。而由于这个公司的VPN技术挂接了Winsock,因此就有可能导致Apache无法启动。


金山清理专家的LSP修复工具更能清楚地显示其winsock挂接情况。

(正常的时候)


(安装了VPN服务后)

 

解决方法是,重置LSP到初始状态(常见的是winsockfix这个软件,金山清理专家的LSP修复工具也能解决该问题)。重启后,问题得到完美解决。


还好,没被大众结果给迷惑,否则只盯着LMhosts的话,估计以后Apache再次出错的时候又兜了个大弯,就是想不到是winsock的问题......

 

后记:
1、后来我想,能否两个共存呢?于是乎在重启后在Apache正常工作后再次安装该VPN服务插件,发现在再次重启前Apache还能工作,但一旦重启,就不行了;即使通过IE的“管理加载项”来禁止所有与此VPN组件有关的加载项,结果Apache还是无法启动。看来,这两个东西是无法并存的了......

2、第二次测试的时候,系统日志终于有了类似的setup_inherited_listeners错误提示:

 

The Apache service named  reported the following error:
>>> (OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : make_sock: could not bind to address 0.0.0.0:80     .

 

 

怎么系统日志上有些时候有这个错误、有些时候又没有呢?是软件问题还是系统日志问题?唉,我也不知道......

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
indows下apache的ThreadsPerChild和Win32DisableAcceptEx
电脑开机启动慢怎么回事??
windows不能在本地计算机启动Apache Tomcat. 有关更多信息,查阅系统事件日志。如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码0.
Windows Sockets错误码列表及出错原因
未能连接一个 Windows服务,桌面文件都没了
网络小精灵1.5
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服