IIS 8.5 "Service Unavailable" 而不是抛出错误
IIS 8.5 "Service Unavailable" instead of throwing an error
我想知道是否有人可以帮助我解决这个问题。 (抱歉,对于某些人来说这可能是 TL;DR..)
我们最近将我们的 C# MVC 网站从一台服务器迁移到另一台类似规格的云服务器(第一个是 2 vCPU 4GB 64 位 WS2012 IIS 8,新的是 4 vCPU 4GB 64 位 WS2012 R2 IIS 8.5) .
经历了设置 MVC、重写模块等最初的障碍后,我们成功地设置了新系统——除了一个小问题。系统中有一些较长的 运行ning 报告作为存储过程,通常 运行 大约 5 分钟。以前我们必须为这些增加脚本和命令超时,这样它们就不会抛出通常的 "connection timed out" 异常。
我们再次检查,这些报告在旧服务器上仍然 运行 完美无缺。
但是,在新服务器上,相同的报告开始在执行时抛出 'Service Unavailable' 错误,这实际上会杀死站点几分钟,除非我们重新启动站点并回收应用程序池(基于 appcmd 命令,应用程序池保留在'started' 状态,但网站的所有其他部分都出现相同的 'Service Unavailable' 错误)。
因此,在与托管服务提供商进行了一次尝试后,我们设法确定的是,一旦存储过程被触发,它 运行s - 并且可能会在后台完成 - 但服务不可用消息在 30 秒后出现(在某些情况下为 1 分 5 秒)。
认为这可能是由两件事引起的:资源短缺或进程长度,我模拟了一个只执行 2 分钟 WAITFOR 命令的存储过程。此过程导致相同的服务不可用。
这对我来说意味着问题要么在 IIS 中,要么在代码中。然后我经历了所有必要的循环:
- %systemdrive%\windows\system32\logfiles\httperr 文件夹在每次超时时显示 Connection_Abandoned_By_ReqQueue,
- 将快速故障保护更改为 1 分钟内出现 10 个错误
- EventLog 不显示任何与此相关的警告或错误
然后我在错误位周围应用了 try-catch 块,希望我能获得有关该问题的更多信息,但应用程序池似乎没有收到任何错误,而是在错误发出之前关闭了。
所以我的问题是:有没有办法让我更深入地了解为什么会发生这种情况?
但更重要的是:有没有办法强制系统抛出错误而不是关闭?
感谢您的帮助。
需要更多信息,请告诉我。
更新
与此同时,我还发现了另一个重点。在 IIS 中设置本地网站(如通过主机连接回本地主机)指向与远程 URL 相同的代码和数据库 - 实际上工作正常。没有 'Service Unavailable' 错误,并且执行在没有超时的情况下完成。
我尝试关闭防火墙以查看是否是它导致的,但这并没有改变任何事情。
我希望这会提示某人..
虽然我花了大约一个星期的时间,但我终于设法解决了我的问题 - 最后发布的更新提示我查看服务器外部,瞧瞧!
不幸的是,在设置新服务器时,Rackspace 建议我们使用负载平衡器,它忽略任何超时扩展,在 30 秒超时后简单地关闭进出站点的所有流量。为什么?我不知道。我希望有人能做到。
仍在调查如何以及为什么会发生这种情况,但我想我只是把这个问题留在这里而不是删除问题,以防万一有人遇到同样的问题 - 希望它可以节省一些浪费的时间。
我想知道是否有人可以帮助我解决这个问题。 (抱歉,对于某些人来说这可能是 TL;DR..)
我们最近将我们的 C# MVC 网站从一台服务器迁移到另一台类似规格的云服务器(第一个是 2 vCPU 4GB 64 位 WS2012 IIS 8,新的是 4 vCPU 4GB 64 位 WS2012 R2 IIS 8.5) .
经历了设置 MVC、重写模块等最初的障碍后,我们成功地设置了新系统——除了一个小问题。系统中有一些较长的 运行ning 报告作为存储过程,通常 运行 大约 5 分钟。以前我们必须为这些增加脚本和命令超时,这样它们就不会抛出通常的 "connection timed out" 异常。 我们再次检查,这些报告在旧服务器上仍然 运行 完美无缺。 但是,在新服务器上,相同的报告开始在执行时抛出 'Service Unavailable' 错误,这实际上会杀死站点几分钟,除非我们重新启动站点并回收应用程序池(基于 appcmd 命令,应用程序池保留在'started' 状态,但网站的所有其他部分都出现相同的 'Service Unavailable' 错误)。
因此,在与托管服务提供商进行了一次尝试后,我们设法确定的是,一旦存储过程被触发,它 运行s - 并且可能会在后台完成 - 但服务不可用消息在 30 秒后出现(在某些情况下为 1 分 5 秒)。
认为这可能是由两件事引起的:资源短缺或进程长度,我模拟了一个只执行 2 分钟 WAITFOR 命令的存储过程。此过程导致相同的服务不可用。
这对我来说意味着问题要么在 IIS 中,要么在代码中。然后我经历了所有必要的循环:
- %systemdrive%\windows\system32\logfiles\httperr 文件夹在每次超时时显示 Connection_Abandoned_By_ReqQueue,
- 将快速故障保护更改为 1 分钟内出现 10 个错误
- EventLog 不显示任何与此相关的警告或错误
然后我在错误位周围应用了 try-catch 块,希望我能获得有关该问题的更多信息,但应用程序池似乎没有收到任何错误,而是在错误发出之前关闭了。
所以我的问题是:有没有办法让我更深入地了解为什么会发生这种情况?
但更重要的是:有没有办法强制系统抛出错误而不是关闭?
感谢您的帮助。 需要更多信息,请告诉我。
更新
与此同时,我还发现了另一个重点。在 IIS 中设置本地网站(如通过主机连接回本地主机)指向与远程 URL 相同的代码和数据库 - 实际上工作正常。没有 'Service Unavailable' 错误,并且执行在没有超时的情况下完成。
我尝试关闭防火墙以查看是否是它导致的,但这并没有改变任何事情。 我希望这会提示某人..
虽然我花了大约一个星期的时间,但我终于设法解决了我的问题 - 最后发布的更新提示我查看服务器外部,瞧瞧!
不幸的是,在设置新服务器时,Rackspace 建议我们使用负载平衡器,它忽略任何超时扩展,在 30 秒超时后简单地关闭进出站点的所有流量。为什么?我不知道。我希望有人能做到。
仍在调查如何以及为什么会发生这种情况,但我想我只是把这个问题留在这里而不是删除问题,以防万一有人遇到同样的问题 - 希望它可以节省一些浪费的时间。