【问题标题】:IIS does not scale, but cpu does not max out either, why is it slowing downIIS无法扩展,但cpu也没有最大化,为什么会变慢
【发布时间】:2013-04-10 23:48:47
【问题描述】:

我有一个应用程序,其中客户端使用 websockets 连接到 IIS。 IIS 然后为 IPC 创建一个本地代理以连接到可执行文件。

所以 IIS 是一种中间人。

随着越来越多的连接进入,整个架构变得越来越慢。

所以某处存在瓶颈。

有趣的是 CPU 没有超过 25% 的使用率。我没有对 CPU utils 施加任何限制。

问题不在于作为函数的代码过去需要 100 毫秒,而现在需要 1000 毫秒。并且这些功能不受网络限制。 简单的图像转换。 我还会检查我是否阻塞了锁或其他任何东西。

如果加入系统的用户越多,就会发生越多的此类图像转换,并且使用的 CPU 越多。 但同样,cpu 利用率并没有改变,它停留在 25% 左右

由于即使是最简单的函数的执行速度也会变慢,我猜应用程序池可以使用多少 CPU 是有限制的。我再次检查了 AppPool 设置,没有限制。

有什么建议可以解决这个问题吗?

【问题讨论】:

  • 让我想想,四核 cpu 所以 25% 是一个核的 100%
  • @Fredou,可能是,但如果工作线程不分布在内核之间,那就太奇怪了。
  • 你已经在网卡、磁盘和内存上抛出 perf mon 了吗?这些是遇到此类 IIS 性能问题时要检查的其他关键组件。

标签: c# iis scalability cpu application-pool


【解决方案1】:

听起来像是通过代码或系统设置进行的 CPU 亲和性设置。

您可以为每个应用程序池设置处理器关联(因此限制为 1 个处理器),这将有效地限制在该池中运行的应用程序使用一个处理器。这将限制 w3wp 进程仅使用一个处理器,因此如果您有一个四核 CPU,它将以 25% 的速度运行。您可以在此处找到通过 IIS 设置更改此设置的详细信息:this:http://www.iis.net/configreference/system.applicationhost/applicationpools/add/cpu

您也可以检查任务管理器并右键单击该进程并单击“设置 Afinity..”,看看您是否将 IIS 限制为一个核心。

希望对您有所帮助!

【讨论】:

  • 在任务管理器上右键 w3wp.exe 并查看亲和力,我看到所有 11 个 CPU 都被选中。所以 11 cpu 在 dec 和 0X7FF hex 中是 2047。所以我将 AppPool affinity Enabled 设置为 true,Affinity mask 设置为 2047。这意味着使用所有 CPU。我仍然没有通过 20% 到 30%,但应用程序的速度越来越慢。我还删除了所有其他应用程序池以确保。我在默认应用程序池上运行它。
【解决方案2】:

您可以检查应用程序池进程的进程亲缘关系。这可能是你被困在 25% 的原因。

除了处理器关联之外,如果您的请求长时间运行,您可能会超出 IIS 允许的每个 CPU 的并发请求数的默认限制(尤其是在集成模式下....12)。四核 CPU 上的 25% 暗示亲和力是您的问题,但如果不是,您也可以检查一下。这是related answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多