• surging作者出具压测结果


    前言

    首先回应下@wen-wen 所贴的压测报告,我也把我和客户压测碰到的问题,和压测结果贴出来,这个结果是由客户提供的。不会有任何的舞弊手脚问题

    问题一:Task.Run慎用

    首先在最新的社区版本已经把Task.run全部去掉了(包括了kestrel RPC调用服务),当你的程序有比较耗时的业务处理的时候,Task可以提升性能,但是不耗时的时候,也许就不能提高性能,反而成为瓶颈,因为当一批Task.run未执行完,新一批的请求又来了,就会阻塞造成cpu的升高,所以之前在netty 的ServerHandler中使用task.run ,在压测不带业务的服务时候,因为都是纳秒级的响应,所以造成了task的阻塞,执行万次的循环压测,CPU一直在20%左右,后续已经通过netty 的业务线程进行处理,CPU一直稳定在6%左右, 代码如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    if (_logger.IsEnabled(LogLevel.Debug))
                   _logger.LogDebug($"准备启动服务主机,监听地址:{endPoint}。");
     
               IEventLoopGroup bossGroup = new MultithreadEventLoopGroup(1);
               IEventLoopGroup workerGroup = new MultithreadEventLoopGroup();//Default eventLoopCount is Environment.ProcessorCount * 2
               var bootstrap = new ServerBootstrap();
               
               if (AppConfig.ServerOptions.Libuv)
               {
                   var dispatcher = new DispatcherEventLoopGroup();
                   bossGroup = dispatcher;
                   workerGroup = new WorkerEventLoopGroup(dispatcher);
                   bootstrap.Channel();
               }
               else
               {
                   bossGroup = new MultithreadEventLoopGroup(1);
                   workerGroup = new MultithreadEventLoopGroup();
                   bootstrap.Channel();
               }
               var workerGroup1 = new SingleThreadEventLoop();// 声明业务线程
               bootstrap
               .Option(ChannelOption.SoBacklog, AppConfig.ServerOptions.SoBacklog)
               .ChildOption(ChannelOption.Allocator, PooledByteBufferAllocator.Default)
               .Group(bossGroup, workerGroup)
               .ChildHandler(new ActionChannelInitializer(channel =>
               {
                   var pipeline = channel.Pipeline;
                   pipeline.AddLast(new LengthFieldPrepender(4));
                   pipeline.AddLast(new LengthFieldBasedFrameDecoder(int.MaxValue, 0, 4, 0, 4));
                   pipeline.AddLast(workerGroup1, "HandlerAdapter", new TransportMessageChannelHandlerAdapter(_transportMessageDecoder));//添加业务线程处理
                   //添加业务线程处理
                    pipeline.AddLast(workerGroup1, "ServerHandler", new ServerHandler(async (contenxt, message) =>                          
                   {
                       var sender = new DotNettyServerMessageSender(_transportMessageEncoder, contenxt);
                       await OnReceived(sender, message);
                   },  _logger));
               }));
               try
               {
                   _channel = await bootstrap.BindAsync(endPoint);
                   if (_logger.IsEnabled(LogLevel.Debug))
                       _logger.LogDebug($"服务主机启动成功,监听地址:{endPoint}。");
               }
               catch
               {
                    _logger.LogError($"服务主机启动失败,监听地址:{endPoint}。 ");
        }
            }

     问题二:检查主频,核数

    首先客户一开始测试使用的是家庭电脑,他一直压测不上去,说用jmeter怎么2000就timeout了,后面了解到他的电脑是4核,主频1.8,内存32G,后面告诉他你要达到预期就要高频或者多核的干净电脑。

     

    1
     

     问题三:检查熔断策略

    检查MaxConcurrentRequests,ExecutionTimeoutInMilliseconds  等设置

     

    客户结果

    单表新增数据库, cpu 一直保持在30%,可能因为ingress设置关系只能压测到4000

     

    个人测试结果

    无业务压测:

    用httpkestrel 压测可以达到2w/s,   rpc  可以达到10w/s

    rpc 大家都可以测试,  通过社区版本下载, 启用server, 开启多个client 进行压测,有问题可以告诉我

    总结

    surging 正在往平台化发展, 年底应该会推出社区版雏形, 望大家多多关注。

     

  • 相关阅读:
    Abp框架Web站点的安全性提升
    y79.第四章 Prometheus大厂监控体系及实战 -- prometheus的服务发现机制(十)
    lwip无法连接指定个数TCP连接问题
    【优化算法】新型多目标热交换MOTEO优化算法(Matlab代码实现)
    docker-java 用Java操作docker创建容器并运行运行容器
    面向对象——抽象类
    后端开发总结(3):代码健壮性:容错处理+测试
    有哪些免费的PPT模板网站,推荐这6个PPT模板免费下载网站!
    【AUTOSAR-RTE】-3-Runnable及其Task Mapping映射
    css 居中
  • 原文地址:https://www.cnblogs.com/fanliang11/p/16484994.html