当使用并发ab测试时,红隼挂起

时间:2018-01-16 11:46:43

标签: c# http .net-core macos-high-sierra kestrel

所以我有以下简单的代码:

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问题。

0 个答案:

没有答案