【问题标题】:IIS website slow in response when calculation in progressIIS 网站在计算过程中响应缓慢
【发布时间】:2018-10-25 23:22:29
【问题描述】:

我有一个连接到 MySQL 的 IIS 网站。我在网站上有一个链接,可以进行密集计算。触发此链接时,它会使用大约 20% 的 CPU 资源。然后,如果我单击其他链接,其他链接响应非常慢。直到做计算的链路完成,然后其他链路响应时间将恢复。我很好奇为什么只使用了 20% 的 CPU,但其他链接仍然响应缓慢。看来计算环节占用了CPU资源。但是不是不同的环节是并行运行的,一个环节的密集计算应该怎么影响呢?我该如何改进它,或者我应该在我的代码的 IIS 中调整一些东西?

【问题讨论】:

  • 计算是什么?
  • 从数据库中获取公式表达式,并运行递归函数计算公式。
  • 嗯,听起来这个函数的线程优先级太高,拖慢​​了其他服务器进程。有没有办法在 BackgroundWorker 中运行计算?
  • 我已将应用程序池中的“最大工作进程”设置为16。但是,当一个链接正在加载时,另一个链接仍然需要等待。似乎请求没有分派给不同的工作人员?

标签: c# asp.net web iis cpu


【解决方案1】:

为您的网站增加 IIS 应用程序池中工作进程的最大数量。这将使服务器能够同时处理多个请求。下面是方法。

  1. 打开 IIS 管理器并导航到应用程序池。
  2. 右键单击您网站的应用程序池并选择高级设置。
  3. 在进程模型下的高级设置对话框中,将最大工作进程的值更改为10。[您可以输入另一个数字(大于或小于10)]默认为1,表示仅启动一个工作进程处理您的所有请求。这意味着一次只会处理一个请求。
  4. 单击确定保存更改
  5. 重新启动您的应用程序池 [非强制性,但建议]
  6. 就是这样。您的网站现在应该能够同时处理多个请求

【讨论】:

  • IIS 工作进程足够聪明,可以托管多个线程来处理传入的请求,因此“当进程正在执行一个请求时,其他传入的请求会排队并一次执行一个”是完全错误的.由于错误的陈述,这个答案并没有提供太多的洞察力。网络农场当然可以提供帮助,但即使是单个服务器也可以通过适当的优化来处理许多请求。
  • 感谢 Lex Li 的洞察力,我对此进行了更多研究,更新了我的答案,以上内容对我有用
  • 增加“最大工作进程”是 IIS 6 中引入的称为“网络花园”的功能。但是,在大多数情况下不应该使用它,因为切换到网络农场更可行。但是,如果我们回到问题本身,这个 Web 应用程序是使用不正确的锁定编写的,因此开发人员应该在更改 IIS 上的任何内容之前解决这个问题。网络农场和网络花园都不应该用来隐藏确切的罪魁祸首。
  • 谢谢。但我也考虑到提出问题的人可能不想更改算法/代码上的任何内容,因为没有提供代码!这让我得出结论,使用多个工作进程实际上是有用的,因为我无法就代码/算法提供任何建议。你怎么看?
猜你喜欢
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
相关资源
最近更新 更多