所以我有以下简单的代码:
namespace MyApp
{
public class Startup
{
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
app.Run(async context => {
context.Response.StatusCode = 200;
context.Response.ContentLength = 4;
await context.Response.WriteAsync("test");
});
}
}
public static class Program
{
public static void Main(string[] args)
{
var app = WebHost.CreateDefaultBuilder(args)
.UseKestrel(options => {
options.Listen(IPAddress.Loopback, 5000);
options.AllowSynchronousIO = false;
})
.UseStartup<Startup>()
.Build();
app.Run();
}
}
}
我通过
运行服务器$ dotnet run
然后我试图测试它:
$ ab -p test.json -n 20000 -c 100 http://127.0.0.1:5000/
json文件是一个小{"test": 1}
字符串。
在开始时,请求按预期快速处理。但是我发出的请求越多,Kestrel越慢。在某些时候(通常在处理16k请求之后),它会挂起并且ab
工具超时。
有趣的是,如果我等待几秒钟并再次运行ab
,它的工作方式完全相同。在某些时候(在3/4请求之后的某个地方),它会挂起并超时。所以看起来Kestrel自动处理&#34;悬挂&#34;在某些时候请求,并再次准备好再次被阻止。
我已将最大打开文件描述符限制增加到100000,但这根本不会影响行为。我也和Kestrel一起玩options
但结果仍然相同。
是什么造成的?我该如何解决?
我使用macOS High Sierra 10.13.2和dotnet核心版本2.1.3。这种行为与macOS有关吗?
编辑:我正在结束自己的问题。实际上 是一个macOS问题。