【发布时间】:2018-04-06 13:56:53
【问题描述】:
我在开发的应用程序中遇到了一个奇怪的问题。该应用程序是托管在 Kestrel 上运行的 AspNetCore 2.0 的 Windows 服务。此应用程序通过充当代理的 IIS 站点接收请求。
在这个应用程序中,我还使用了使用 Microsoft.AspNetCore.Owin 集成的信号 2.2.2。在我检测到应用程序没有响应请求之前,一切都运行良好。
同一台机器上的其他应用程序使用相同的 IIS 服务器作为代理运行正常。重新启动为该站点服务的应用程序池暂时解决了问题。
当同一台机器上有 400 个信号器 SSE 连接时,该问题再次浮出水面并通过监控信息挖掘应用程序似乎挂起。这似乎是合理的,因为我发现默认情况下 OWIN 将并发请求的数量限制在 100 * number of cpus。 (请注意,同一台机器上的站点每分钟可以毫不费力地处理 5000 个请求,但这些请求不像 SignalR 那样长期存在)
问题是在 AspNetCore 中托管 Owin 时,我似乎无法找到相同的选项。有人知道这是否可以解决,正确的设置是什么?
编辑:我相当确定问题是由同时打开的 SignalR 连接数引起的,因为通过在 Javascript 中禁用它,问题就消失了。
第二次编辑:signalr 似乎不是cuplrit,因为在测试和生产中都使用曲柄对站点进行负载测试,直到 5000 个并发连接,这是默认的 IIS 限制,对我来说很好
【问题讨论】:
-
SignalR 2 在 Asp.Net Core 上不受支持。查看 Asp.Net Core 2.1 的新预览版。
-
100 倍 CPU 的限制不适用于 kestrel。
-
我知道它不受支持,我正在热切地等待 asp.net core 2.1 的发布。我还认为该限制不适用于 Kestrel,但某些事情正在使所有请求等待,这似乎是最合乎逻辑的罪魁祸首,因为它仅在 4 cpu 服务器上的 signalR 打开连接数达到 400 时才会发生
-
我希望你没有为每个套接字连接打开一个数据库连接
-
不,这个应用程序甚至没有数据库
标签: asp.net-core signalr owin