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

时间:2019-05-15 11:14:09

标签: iis asp.net-core amazon-ec2 jmeter kestrel

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

对于IIS配置,我遵循MS documentation

对于红est,我只是使用:

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

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

结果,Kestrel失败了75%的请求,且套接字关闭/超时错误:

enter image description here

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

1 个答案:

答案 0 :(得分:0)

原来,所描述的行为是在测试同步端点的性能时发生的。

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

切换为异步可以消除性能差异,请参见: enter image description here

参考: