原文地址:http://mvolo.com/where-did-my-iis7-server-go-troubleshooting-503-quotservice-unavailablequot-errors/
一) 这是什么?
WAS(W3SVC)服务,是创建用来处理接收的HTTP 请求的IIS 工作进程的服务,当WAS创建IIS工作进程失败后就会出现这个错误
二)为什么会发生?
有许多原因造成WAS创建IIS工作进程失败:程序配置、不正确的程序池配置、IIS配置错误造成的工作进程初始化失败或某个进程崩溃等。
三)如何解决这个错误?
步骤1:检查|IIS的应用程序池是否停止
WAS启动工作进程如果在5分钟内失败5次,会进入故障保护模式并停止程序池中的处理程序,这样可以防止程序崩溃。
一旦包含你的处理程序停止,就会产生503错误,我们通过下列方式检测:
> %systemroot%windowssystem32inetsrvAppCmd.exe list apppools
如果发现程序池是停止的,那么我们就可以继续下一步了
步骤2:检查事件日志
IIS 工作进程初始化失败或WAS创建IIS工作进程失败时,会在windows中写下日志供我们查看。
> eventvwr
导航到 “Application” event log first. Look for error events from IIS-W3SVC-WP source.
在上面的例子中,IIS 工作进程因为加载DLL不成功造成初始化失败(路径拼写错误);如果错误原因在工作进程启动之前,那么就是WAS创建工作进程错误,日志写在“System”event log。在我的例子中,IIS工作进程初始错误,WAS多次启动不成功进入故障保护模式,下图是查看“System”event log
MS的链接失效了,故跳过一段
步骤3:处理错误
当然这一步依赖于参考前一步找到特定的错误,一定要参考IIS Health Model的事件日志参考(链接丢失啊),例如:
WAS 启动工作进程失败:
1)配置错误
2)程序池使用了错误的账户名或密码
3)达到允许的最大数量的进程或没有资源
IIS 初始化失败:
1)配置错误
2)DLL路径错误或加载失败
3)module初始化失败,或注册模块入口点失败
程序崩溃:
一个模块或程序组件产生一个调试中断,或内存访问冲突造成进程的终止等。
修复错误后,就可以进行下一阶段了。
步骤4:重启应用程序池
> %systemroot%windowssystem32inetsrvAppCmd.exe start apppool DefaultAppPool
(将 DefaultAppPool 替换成你的程序池名称).
程序池正常启动入下图:
如果仍然存在问题,那么继续参考下面的文章:
http://mvolo.com/troubleshooting-iis7-503-quotservice-unavailablequot-errors-with-startup-debugging/
http://mvolo.com/where-did-my-iis7-server-go-troubleshooting-quotserver-not-foundquot-errors/
http://mvolo.com/troubleshoot-iis7-errors-like-a-pro/
http://social.technet.microsoft.com/wiki/contents/articles/21754.event-id-2276-iis-worker-process-availability.aspx