1

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

所以IIS有点像中间人。

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

所以某处存在瓶颈。

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

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

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

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

关于如何解决这个问题的任何建议?

4

2 回答 2

4

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

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

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

希望这对你有帮助!

于 2013-04-10T23:58:06.087 回答
2

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

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

于 2013-04-11T00:02:10.527 回答