【发布时间】:2021-01-07 12:34:11
【问题描述】:
我正在使用 ASP .NET SignalR 在浏览器中创建实时游戏。除了显示输出偶尔出现卡顿之外,它似乎运行良好。
当我将应用程序部署到云中的虚拟 PC 时,我首先注意到了这一点。为了排除带宽问题,我将其部署到另一台本地运行的虚拟 PC 上。
即使在本地从虚拟 PC 运行应用程序时,我仍然会卡顿。
当我使用 IIS express 在本地主机上运行应用程序时,不会发生此问题。
这让我觉得这个问题与 IIS 有关,因为云虚拟 PC 和本地虚拟机都有这个共同点,而本地主机没有。
谷歌搜索后,我发现很多人建议检查 IIS 中的某些设置。
不过我没有发现任何问题。
另一个建议是在应用程序池的高级设置中检查队列长度。目前它是 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 会延迟较长的时间向用户发送“忙碌消息”,从而使用户感到服务器可能已停止服务。队列长度过低会导致服务器频繁发送“服务器忙消息”,消耗服务器资源。