gpt4 book ai didi

c# - IIS7 中无响应的 ASP.NET 站点

转载 作者:行者123 更新时间:2023-11-30 22:48:08 24 4
gpt4 key购买 nike

在我工作的地方,我们最近有一个网站非常没有响应(一个简单的请求需要 1 分钟或更长时间。当我测试它时,我尝试了一个简单的页面:

<%@ Page Language="C# %>
<html><body><h1>Hello World</h1></body></html>

(PS:缺少代码隐藏声明是有意的 - 仅此而已。没有实际代码)

而且它仍然需要一分钟的时间来响应。来自同一个 IIS 站点的静态 .html 文件是即时的。

该站点获得了很多点击,我们使用的 CDN 实际上配置错误,因此获得了大量点击。一旦我们修复了该配置,它就恢复了正常速度,但它仍然困扰着我,因为我无法弄清楚出了什么问题,据我所知,服务器没有理由不能处理它.

服务器的 CPU 负载以大约 5% 的速度巡航,它有超过 1 GB 的 RAM 未使用,服务器上的所有其他站点加载正常,暂存站点(具有所有相同的外部依赖项)加载正常。

任何人都知道什么样的事情会导致这种情况?单个站点(或应用程序池 - 它有自己的资源)中是否有我们可以使用的任何资源,以至于整个站点变慢了?我不是自己写的,所以我不确定所使用的对象是否得到适当处理,很容易有未处理的 Web 请求、文件或数据库连接,但我看不出这些会如何减慢微小的速度我制作的测试页...

最佳答案

发生这种情况的原因有很多。我通常首先寻找的是某种网络延迟。即使您的 ASPX 页面只是您发布的两行代码片段,在管道的早期也可能会发生一些事情:

  • 安全规则(它可能会尝试联系某处的身份验证/授权服务或数据库);
  • 自定义 HttpModules,通过 web.config 或直接通过 IIS 配置;
  • web.config 中的各种其他设置可能会触发早期操作(即跟踪/日志记录,可能日志已满或指向网络位置)
  • 在 global.asax 中执行的任何代码
  • 加载 ASP.NET 身份的用户配置文件(如果配置了此选项,则默认情况下未配置)
  • 等等...

有些只会在应用程序首次加载时发生,有些会在每次页面加载时发生。

具有低 CPU 和磁盘使用率的无响应网络应用程序也可能表明线程池中的所有可用线程都被阻塞,要么是由于死锁(可能是应用程序本身不小心使用了线程池),要么是等待在外部资源上。即使您的测试页面不调用任何外部资源,如果您有 50 个在线用户都调用调用的页面,如果网站设计不当(见下文),它很容易耗尽资源池。如果加载页面恰好用了 30 或 60 秒,那么它可能是一个红旗,表示某处超时。

ASP.NET 网站中的一个常见设计错误是在常用页面或代码路径上同步数据访问、I/O 或网络代码(即调用远程 Web 服务)。默认情况下,这些都是阻塞调用,如果页面未转换为 Async 模型,则在应用程序等待响应时不会将线程释放回线程池,从而阻止服务器在池完成后接受任何新连接用完了(我认为默认情况下是 25 个线程)。在低流量网站上,这可能永远不会成为问题,但在高流量网站上,它很快就会成为问题。

当然,我只是在这里抛出各种可能性。在不了解更多有关站点和配置的情况下,很难确定。运行详细的跟踪(尤其是在服务器启动的网络连接和文件访问上)可能会告诉您更多信息。

关于c# - IIS7 中无响应的 ASP.NET 站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1892458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com