1

我最近部署了一个使用许多 Web 服务调用的 Web 应用程序。在开发过程中,我没有注意到任何死锁或争用,但是现在当网站处于活动状态并且访问量很大时,我每天在事件日志中收到此错误几次,并且网站也冻结/挂起,因此我必须重新启动 IIS .

应用程序池“默认 AppPool”超出其作业限制设置。

我在这个网站http://support.microsoft.com/kb/821268上找到了一些信息,看起来很有希望,但我需要一些关于设置值的帮助。

我正在考虑调整这些设置:

* maxWorkerThreads
* minWorkerThreads
* maxIoThreads
* minFreeThreads
* minLocalRequestFreeThreads
* maxconnection
* executionTimeout

首先它说我必须在 Machine.configm 中执行它们,但我不能只在 Web.config 中执行它们吗?

其次,解决我的争用问题的推荐设置是什么?我的(虚拟)网络服务器在以下系统配置上运行:

在此处输入图像描述

我也知道要永久解决这个问题,我可能必须对我的代码做一些事情,添加缓存等。我也欢迎有关此的提示。

4

2 回答 2

1

您的知识库链接仅与 .NET 框架的 2.0 和更早版本有关。

连接到 Web 服务的 ASP.NET 网站通常不会发生死锁。因此,如果您在代码(或第三方库)中使用自定义锁定,很可能是罪魁祸首。因此,深入了解这一点很重要。

如果它是瓶颈,增加线程数可以帮助提高性能。它不太可能帮助解决线程死锁。

就解决方案而言,最重要的一项设置是maxConnection默认情况下为 2,这意味着您只能同时进行 2 个 Web 服务调用

也看看这个

于 2011-03-24T12:12:30.530 回答
0

感谢 Aliostad 和http://www.guidanceshare.com/wiki/ASP.NET_2.0_Performance_Guidelines_-_Threading我现在调整了我的 Web.config 并添加了以下设置:

<httpRuntime maxRequestLength="30000" minFreeThreads="88" minLocalRequestFreeThreads="76" />
<processModel maxIoThreads="100" maxWorkerThreads="100" />
<connectionManagement>
   <add address="*" maxconnection="48" />
</connectionManagement>

这看起来好吗?我不确定为什么要添加 maxRequestLength="30000",但它已经有一段时间了。可能是问题,它高达 30000?

编辑: 看起来我无法在我的 Web.config 中添加 tge processModel 标记,我收到此错误: 在此处输入图像描述

于 2011-03-24T12:44:18.593 回答