我有一个非常繁忙的网站,每月大约有1000万次观看.
我的一个应用程序池似乎阻塞了几个小时,我正在寻找一些有关如何解决它的想法.我怀疑它以某种方式用完了线程,但是我不确定如何追溯地确定它.这是我所知道的:
>该站点从未停止运行,但是大约90%的请求开始超时.
>我可以看到大量的“ HttpException-请求超时”.在停机期间在日志中
>我找不到任何可能导致超时的SQL错误或代码错误.
>超时似乎在所有页面上都存在.
>一页上有错误,这会导致该特定页面上的错误.
>必须重新启动站点.
该站点是ASP.NET C#3.5 WebForms.
可能性:
>线程耗竭:我的想法是,导致错误的页面可能已经以某种方式开始阻塞可用线程?
>全局代码错误:另一种可能性是我的一个静态类的某个地方存在未发现的错误.这不太可能,因为这从未发生过,并且我找不到这些类的任何日志错误,但这是有可能的.
更新
现在,我已经设法跟踪了该问题的发生.页面正常加载,但是由于某种原因WebResource.axd和ScriptResource.axd都需要一分钟的时间来加载.在性能计数器中,我可以看到此时的ASP.NET请求排队高峰.
解决方法:
我要尝试的第一件事是萨姆·萨弗隆(Sam Saffron)的CPU analyzer tool,它应该指出是否发生了太多/太长的常见情况.部分原因是它不涉及任何更改;只需在服务器上运行它即可.
在那之后,还有其他各种调试工具可用.我们发现some very ghetto approaches可以有效地判断时间花在哪里(当然,仅在成功结果的10%上有效).
当然,您可以打开服务器配置文件工具,然后拖入各种.NET / IIS计数器,这可能有助于您发现一些问题.
在这三个选项之间,您应该了解:
>代码掉入一个黑洞而永不出来(通常与线程相关)
>代码正在运行,但是速度太慢(通常与数据访问有关)
标签:iis,asp-net,c
来源: https://codeday.me/bug/20191208/2091780.html