28

与 Kestrel http 服务器相比,IIS 的性能如何?

似乎 Kestrel 受到异步和事件驱动服务器框架系列的极大启发。同时,IIS的发展历史悠久,在功能上明显更加成熟。考虑到所有这些,我专门寻找内存利用率、线程利用率、请求相关比较(如每秒请求)和流功能的比较。

4

5 回答 5

19

这是来自 GitHub 存储库的XSLX 文件,您可以在其中查看您正在寻找的性能比较。

在 Excel 上打开文件并检查“最新”选项卡。 在此处输入图像描述

更新:该 excel 文件不再可用,并已替换为交互式 Power BI 仪表板

于 2016-02-18T22:06:48.920 回答
6

我为我当前的项目做了很多基准测试,在 IIS 和 Kestrel 上托管 .net core 1.0 和 2.0 应用程序。测试是真实世界的 rest-api CRUD,具有身份验证/授权、日志记录、指标、速率限制等。此外,.net 核心应用程序完全由 MS 手册完成,符合推荐的 1.0/2.0 标准。

使用相同的硬件设置,在 IIS 后面的托管服务每秒不断增加约 40% 的请求。我仍然找不到能够解释性能差异的文章或顾问。

我还尝试从核心基准测试权威https://github.com/aspnet/benchmarks中找到任何类型的优化技巧,方法是翻遍设置和服务初始化程序,但 IIS 仍然更快。

任何指针?

于 2018-02-13T14:29:47.043 回答
5

截至 2016 年 11 月,直接来自ASP.NET 基准测试

在 Windows Server 2012 上,管道深度为 16:

stack        on       RT        requests/sec
ASP.NET 4.6  IIS      CLR           57,792 
ASP.NET 5    Kestrel  CoreCLR    1,188,521       

这是 20 倍或 2000% 的加速。我了解成熟的 IIS 与独立的 Kestrel,但我确实希望 ASP.NET 团队中的某个人能够深入研究这一点,因为差异是巨大的。

这也是为什么它在 Linux 上要慢得多。

基准测试结果

于 2016-11-14T06:32:43.153 回答
0

以下是 asp.net 团队的一些初步 Kestrel 基准测试。虽然不像您所寻找的那样详尽,但您会发现他们发布了一些有关 RPS 的信息。我敢肯定,随着他们越来越接近发布,还会有更多。您可以通过简单的 google 搜索在 Internet 上找到 IIS 基准:

https://github.com/aspnet/benchmarks

于 2016-02-02T03:10:29.830 回答
0

至于为什么 IIS 中的进程内托管更快(直接取自文档):

使用进程内托管,ASP.NET Core 应用程序在与其 IIS 工作进程相同的进程中运行。进程内托管比进程外托管提供了改进的性能,因为请求不通过环回适配器代理,环回适配器是一种将传出网络流量返回到同一台机器的网络接口。

请参阅托管模型

于 2019-07-15T08:16:59.353 回答