gpt4 book ai didi

iis - 使用 .NET Core 2.2 的 Kestrel 与 IIS+Kestrel 性能(吞吐量)

转载 作者:行者123 更新时间:2023-12-01 04:28:37 32 4
gpt4 key购买 nike

对于部署在单个 AWS EC2 主机上的 .NET Core 2.2 应用程序,我比较了 IIS 托管与普通 Kestrel 托管。

对于 IIS 配置,我遵循 MS documentation .

对于 Kestrel,我只是使用了:

dotnet app.dll --server.urls http://*:5000

我正在使用 JMeter 运行“压力”测试以比较吞吐量。这个测试只是用 100 个线程调用应用程序的端点,持续 10 秒(5 秒预热)。请注意,该端点基本上是在每次调用时从 MSSQL Server 数据库获取相同的数据,没有缓存等。

因此,Kestrel 会因套接字关闭/超时错误而失败 75% 的请求:

enter image description here

问题:什么样的配置错误会导致这种 Kestrel 行为?我尝试在 Kestrel 前面使用基本的 nginx 反向代理,但仍然得到相同的结果。

最佳答案

事实证明,在测试 的性能时会发生所描述的行为。同步 端点。

通过关注 Thread injection算法,CLR 将只有 minWorkerThreads/minIoThreads 来处理请求,并且由于“压力”测试使用的线程多于我们等待新线程时创建的线程 - 这导致响应时间几乎线性增长。

切换到 异步 消除了性能差异,请参阅:
enter image description here

引用文献:

  • ASP.NET MVC and Web API - Comparison of Async / Sync Actions
  • CLR 上的官方文档 Thread Injection算法
  • Related SO issue
  • 关于iis - 使用 .NET Core 2.2 的 Kestrel 与 IIS+Kestrel 性能(吞吐量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56148028/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com