我有一个用于下载移动文件的网站,并且我的网站上有很多用户。有时我会出现以下错误:
HTTP Error 503 - Service is unavailable
1-那么为什么会发生这个错误以及这意味着什么?
2-据我所知,当 appache 超载时,它会自行释放,但是 iis 呢?
我怎样才能在我的服务器中设置一些限制(我可以远程访问我的服务器)以防止此错误发生?
a.限制下载速度是否能有效防止错误发生?
我该怎么做?
Squid 是否适合这项工作,或者我可以使用另一个 iis 扩展来完成这项工作。
b.限制下载带宽是否能有效防止错误发生?
我该怎么做(使用 iis 或其他扩展)?
在 iis 的右侧 -> 配置区域 -> 我发现了一些限制。
这些限制是什么意思,我可以使用它们来让我的服务器始终保持活动状态吗?
编辑:
查看 Windows 事件查看器 -> 自定义视图 -> 服务器角色 -> Web 服务器(IIS)后,我发现该区域没有错误。
但有很多警告和信息。
最新的警告和信息如下:
警告
为应用程序池“ASP.NET 4.0 (Integrated)”提供服务的工作进程“2408”未能在规定时间内停止协议“http”的侦听器通道。数据字段包含错误编号。
警告
为应用程序池“ASP.NET 4.0 (Integrated)”提供服务的进程在关闭期间超出了时间限制。进程 ID 为“6764”。
警告
为应用程序池“ASP.NET 4.0 (Integrated)”提供服务的工作进程“3232”未能在规定时间内停止协议“http”的侦听器通道。数据字段包含错误编号。
警告
为应用程序池“ASP.NET 4.0 (Integrated)”提供服务的进程在关闭期间超出了时间限制。进程 ID 为“3928”。
提前
致谢
答案1
我猜你达到了 IIS 可用的线程数上限。IIS 会根据以下情况分配一定数量的线程:IIS 版本默认情况下,配置设置取决于服务器中的处理器/核心数量。您可以根据需要进行专门调整。
您可能会耗尽线程,因为您将下载流传输到客户端。如果您以同步方式执行此操作,您的网站最终将耗尽线程,因为每个线程将被单个下载占用。如果可能,您应该修改下载代码以异步工作,例如将其实现为异步 HTTP 处理程序。
编辑:发生 503 错误是因为 IIS 的线程不足以处理其他请求,因此无法处理该请求。事件日志中的错误就是这种情况的结果,因为 IIS 试图通过退出/回收应用程序池来释放线程和资源,因为它没有响应内部“活动”ping。
限制下载速度实际上会加剧问题,因为您将更快耗尽线程。只有在耗尽总带宽时才应限制下载速度,否则就让客户端尽可能快地下载。
唯一真正能让您的服务器扩展的解决方案是更改代码,以便异步处理下载。或者更改解决方案,让下载由 IIS 本身的静态文件处理程序处理,例如通过使用重写规则或自定义重写提供程序。如果不了解有关您的应用程序的更多详细信息,很难再说下去。
答案2
如果您的应用程序池因应用程序的错误而失败,并且错误数量超过了 iis 中分配给您的应用程序的最大故障限制,则会出现“HTTP 错误 503 - 服务不可用”错误。
解决方案
- 打开 IIS 管理器。
- 找出您的应用程序池并单击您的池的高级设置。
- 一旦您单击高级设置,它将打开一个窗口。
- 在“快速故障保护”下,您可以找到“最大故障”,将其从默认值 5 增加到 50。
修改高级设置后,回收应用程序。
答案3
没有特定的方法可以解决这个问题,顺便说一句,我们可以尝试一些简单的方法通过以下方法修复 503 错误。
- 再次打开 URL
- 重启路由器
- 稍后再试
- 如果需要访问,请联系网站所有者。
这里有一些关于Http 错误 503 修复,有需要的话可以去参观一下。
答案4
远程桌面进入您的服务器,
检查您的“SQL 服务器报告服务 (MSSQLSERVER)”服务正在运行。
如果没有,
请启动它。