【问题标题】:Stuttering SignalR When Using IIS使用 IIS 时卡顿 SignalR
【发布时间】:2021-01-07 12:34:11
【问题描述】:

我正在使用 ASP .NET SignalR 在浏览器中创建实时游戏。除了显示输出偶尔出现卡顿之外,它似乎运行良好。

当我将应用程序部署到云中的虚拟 PC 时,我首先注意到了这一点。为了排除带宽问题,我将其部署到另一台本地运行的虚拟 PC 上。

即使在本地从虚拟 PC 运行应用程序时,我仍然会卡顿。

当我使用 IIS express 在本地主机上运行应用程序时,不会发生此问题。

这让我觉得这个问题与 IIS 有关,因为云虚拟 PC 和本地虚拟机都有这个共同点,而本地主机没有。

谷歌搜索后,我发现很多人建议检查 IIS 中的某些设置。

这些 websocket 设置被列为可能的罪魁祸首:

不过我没有发现任何问题。

另一个建议是在应用程序池的高级设置中检查队列长度。目前它是 1000。我相信这已经足够了,根据 Perfmon 的说法,接收到的请求数量大约每秒 100 个,发送的请求数量为 80 个。

还有其他人有什么想法吗?

我将 SignalR 用于 ASP .NET 2.4.1 和 IIS 10

谢谢

【问题讨论】:

  • 我注意到您使用的是.net 2.4,但应用程序池的CLR适用于4.0以上版本的应用程序。不确定这是否会影响性能,但您可以对其进行修改。还建议您可以修改 ASP 模块中的一些属性以提高应用程序性能。禁用asp调试,设置Threads Per Processor Limit为50,减少asp的队列长度(不是app pool)。
  • 我正在使用 .NET 框架 4.7.2。 2.4 是 Signal R 库的版本。调试已被禁用 增加线程限制,没有发现任何区别。你能解释一下为什么减少队列长度会有所帮助吗?我不应该增加它吗?我还发现了很多关于如何更改应用程序池队列长度的搜索结果,但没有关于 asp 队列长度的内容。我该怎么做?
  • 该值表示当 ASP 收到大量请求时,IIS 向用户发送“服务器太忙”消息的频率。如果队列长度时间过长,IIS 会延迟较长的时间向用户发送“忙碌消息”,从而使用户感到服务器可能已停止服务。队列长度过低会导致服务器频繁发送“服务器忙消息”,消耗服务器资源。

标签: web iis websocket signalr


【解决方案1】:

看来我错误地归咎于 IIS,经过进一步调查,我发现问题很可能是由于 CPU 使用率过高。

我运行 Perfmon,查看了“%Processor Time”计数器,发现应用程序经常处于 100%。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多