IIS与Kestrel性能比较

时间:2015-12-23 17:13:28

标签: performance iis kestrel-http-server

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

似乎Kestrel受到异步和事件驱动的服务器框架系列的启发。与此同时,IIS具有悠久的开发历史,并且在功能方面显然更加成熟。考虑到所有这些因素,我特意寻找内存利用率,线程利用率,请求相关比较(如每秒请求数)和流功能的比较。

5 个答案:

答案 0 :(得分:13)

以下是GitHub回购中的XSLX file,您可以在其中看到您正在寻找的性能比较。

在Excel上打开文件,然后选中“最新”标签。 enter image description here

答案 1 :(得分:4)

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

使用相同的硬件设置,IIS后面的托管服务每秒可以提供大约40%的请求。我仍然无法找到能够解释性能差异的文章或顾问。

我还试图从核心基准测试机构https://github.com/aspnet/benchmarks中找到任何类型的优化提示,通过设置和服务初始化程序进行搜索,但IIS仍然更快。

任何指针?

答案 2 :(得分:2)

截至2016年11月,直接来自ASP.NET benchmarks

在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 vs standalong Kestrel,但我希望ASP.NET团队中的某个人可以深入研究这个因为差异很大。

这就是为什么它在Linux上的速度要慢得多。

benchmark results

答案 3 :(得分:0)

以下是asp.net团队的一些初步Kestrel基准测试。虽然不像你想要的那样详尽,但你会发现他们发布了一些关于RPS的信息。我确信在他们接近发布时会有更多。您可以通过简单的谷歌搜索在互联网上找到IIS基准测试:

https://github.com/aspnet/benchmarks

答案 4 :(得分:0)

关于为什么IIS中的进程内托管更快(直接从文档中获取)的原因:

  

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

请参见Hosting Models