对于部署在单个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%的请求,且套接字关闭/超时错误:
问题:哪种配置错误会导致这种Kestrel行为?我尝试在Kestrel之前使用基本的nginx反向代理,但仍然得到相同的结果。
答案 0 :(得分:0)
原来,所描述的行为是在测试同步端点的性能时发生的。
通过遵循Thread injection算法,CLR将仅具有minWorkerThreads / minIoThreads来处理请求,并且由于“压力”测试使用的线程数比我们等待新线程时创建的线程数多-这导致响应几乎线性增长时间。
参考: