3

有一个带有一组 Web 服务的 ASP.NET 应用程序,还有一个调用这些 Web 服务的 WinForms 应用程序。

w3wp.exe(处理 asmx 调用)运行特殊进程,这些进程执行非常“困难”的工作(如压缩、xml 解析等)。为什么我们需要在单独的进程中完成它以及为什么我们不在 w3wp.exe 中运行此代码,这是一个很长的故事 - 这在这里无关紧要。一定是这样的。

如果多个用户同时发出多个请求,可能会有 30-40 个这样的进程,它们会消耗 CPU。它们消耗太多,以至于几乎没有 CPU 资源留给 IIS 本身。

因此,接下来的问题是:当以下 HTTP 请求到达此 IIS 时,IIS 无法处理它们:它甚至无法将它们传递给 w3wp.exe,因为服务器被“轰炸”了。 结果,在高峰时间,有 30 个用户运行了他们的查询,第 31 个用户在 WinForms 客户端“超时已过期”中收到了 WebException。

我在互联网上找到了很多解释如何调整 IIS 的文章,但没有人考虑到其他进程和/或应用程序可以在同一台机器上运行的事实。并且没有人告诉如何做才能使 IIS 具有更高的优先级。

所以,接下来的问题是:有没有办法“解释” IIS,它应该默认启动 apppool (svchost.exe) 和 w3wp.exe 并具有更高的优先级?

4

1 回答 1

0

我在 Windows Server 2008 r2 中遇到了这个问题。我有一个 Windows 服务(它使用并行处理),它曾经使我的 CPU 膨胀很多,并且没有为 IIS 和 SQL Server 留下任何东西。

因此,我将处理器关联设置为 Windows 服务以仅使用特定处理器。您进入任务管理器->右键单击进程->设置亲和力。

这使得其他处理器可以免费用于 SQL 和 IIS。

在某种程度上,它降低了 Windows 服务的生产力,该服务现在使用有限的处理器集,但没那么重要。

于 2016-12-27T11:26:27.083 回答