服务端在返回hello,world! 之前先阻塞一秒钟,模拟访问DB等耗时操作。

Netty 我直接在 WorkerGroup 里头sleep,用同步阻塞线程模型的方式来编程,所以性能暴降。

Jooby 自称可直接阻塞访问主线程,但可看到性能也暴降了。这个框架是模组化的,覆盖率和代码质量也很高。但活跃开发人员只有一个,并且生态不完善,很难自由组合,对项目中其它组件的选型带来一定的难度,个人建议是观望,但可以用在side project上。

Jdk HttpServer 在带有阻塞的场景下成功超越了 Netty 系服务端。尽管如此,个人依然不会选择它,因为调优的空间小,也不便于其它协议的开发(都说到这份上了,只能用 Netty 系了)。

Jersey-Netty 不出意外也是性能暴降,这个组合其实在没有阻塞的场景下表现也是中规中矩,但比 SpringBoot 好,无意黑谁,但中国意外的开发者其实挺常拿二者出来比较的。

RESTeasy 和 Netty4 的组合网传性能就不咋样,今儿一测的确是有点迷,况且这项目还留有maven依赖冲突,实在放心不下它的代码质量。

综上所述,写业务代码我选择 Jersey-Netty,因为 JAX-RS 可有效应对善变的需求,而且集成度高,出货速度快,性能在各种场景下表现还行。

写中间件还是选择 Netty 吧,绝对的性能,稳定且可预见的需求。

# Netty

[mougagit@Mous-Air] http-server-compare$ wrk -t8 -c1000 -d60s http://127.0.0.1:8080/
Running 1m test @ http://127.0.0.1:8080/
  8 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.20s     1.61ms   1.20s    62.50%
    Req/Sec     2.44      3.38    20.00     91.94%
  472 requests in 1.00m, 47.02KB read
  Socket errors: connect 755, read 81, write 29, timeout 464
Requests/sec:      7.86
Transfer/sec:     801.79B

# Jooby

[mougagit@Mous-Air] http-server-performance$ wrk -t8 -c1000 -d60s http://127.0.0.1:8080/
Running 1m test @ http://127.0.0.1:8080/
  8 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.02s     3.13ms   1.02s    68.75%
    Req/Sec    12.27     24.98   190.00     95.93%
  1888 requests in 1.00m, 210.19KB read
  Socket errors: connect 755, read 35, write 0, timeout 1856
Requests/sec:     31.46
Transfer/sec:      3.50KB

# Jdk

[mougagit@Mous-Air] http-server-performance$ wrk -t8 -c1000 -d60s http://127.0.0.1:8080/
Running 1m test @ http://127.0.0.1:8080/
  8 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     5.24ms    9.52ms 273.62ms   99.27%
    Req/Sec     0.98k     1.61k    6.55k    82.65%
  32882 requests in 1.00m, 3.79MB read
  Socket errors: connect 755, read 33747, write 189, timeout 0
  Non-2xx or 3xx responses: 32882
Requests/sec:    547.44
Transfer/sec:     64.69KB

# Jersey-jdk

[mougagit@Mous-Air] http-server-performance$ wrk -t8 -c1000 -d60s http://127.0.0.1:8080/
Running 1m test @ http://127.0.0.1:8080/
  8 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     5.47ms    3.14ms  62.59ms   89.71%
    Req/Sec     0.94k     1.17k    5.15k    81.63%
  33102 requests in 1.00m, 3.82MB read
  Socket errors: connect 755, read 33729, write 81, timeout 0
  Non-2xx or 3xx responses: 33102
Requests/sec:    550.74
Transfer/sec:     65.08K

# Jersey-netty

[mougagit@Mous-Air] http-server-performance$ wrk -t8 -c1000 -d60s http://127.0.0.1:8080/
Running 1m test @ http://127.0.0.1:8080/
  8 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.01s    49.59ms   1.48s    97.78%
    Req/Sec   114.74    158.71   828.00     82.89%
  14455 requests in 0.94m, 1.39MB read
  Socket errors: connect 755, read 160, write 23, timeout 245
Requests/sec:    255.29
Transfer/sec:     25.18KB

# RESTeasy-netty

[mougagit@Mous-Air] http-server-performance$ wrk -t8 -c1000 -d60s http://127.0.0.1:8080/
Running 1m test @ http://127.0.0.1:8080/
  8 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.29s     2.36ms   1.29s    62.50%
    Req/Sec     5.39      9.30    66.00     91.87%
  944 requests in 1.00m, 121.69KB read
  Socket errors: connect 755, read 228, write 64, timeout 928
Requests/sec:     15.71
Transfer/sec:      2.03KB

# SpringBoot

[mougagit@Mous-Air] http-server-performance$ wrk -t8 -c1000 -d60s http://127.0.0.1:8080/
Running 1m test @ http://127.0.0.1:8080/
  8 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.22s   270.02ms   1.98s    78.50%
    Req/Sec    71.83     89.66   430.00     84.32%
  11720 requests in 1.00m, 1.41MB read
  Socket errors: connect 755, read 205, write 35, timeout 0
Requests/sec:    195.10
Transfer/sec:     24.01KB

HttpServer带阻塞性能比较的更多相关文章

  1. 使用vs自带的性能诊断工具

    visual studio是个强大的集成开发环境,内置了程序性能诊断工具.下面通过两段代码进行介绍. static void Main( string[] args) { Test1(); Test2 ...

  2. VS2010自带的性能分析工具分析.NET程序的性能

    这篇博文给大家分享的是,如何使用VS自带的性能分析工具来分析我们编写的.NET程序,一边找出程序性能的瓶颈,改善代码的质量.在实际开发中,性能真的很重要,往往决定一个产品的生死~良好的用户体验的基础之 ...

  3. 011 - JDK自带的性能监控工具

      一.概要: jps -l 查看现有的java进程 jps -l 显示所有正在运行的java进程id   jstack 查看Java线程      jstack -l pid; 做thread du ...

  4. (转)MySQL自带的性能压力测试工具mysqlslap详解

    mysqlslap 是 Mysql 自带的压力测试工具,可以模拟出大量客户端同时操作数据库的情况,通过结果信息来了解数据库的性能状况 mysqlslap 的一个主要工作场景就是对数据库服务器做基准测试 ...

  5. 数据库相关文章转载(2) MySQL自带的性能压力测试工具mysqlslap详解

    PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用.其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的.下面举例说说.mysqlslap是从5.1.4版开始的一 ...

  6. (总结)MySQL自带的性能压力测试工具mysqlslap详解

    PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用.其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的.下面举例说说.mysqlslap是从5.1.4版开始的一 ...

  7. 一些JDK自带的性能分析利器

    有时候碰到服务器CPU飙升或者程序卡死之类的问题,一般都不太好定位.这类bug一般都隐藏的比较深并且还可能是偶发性的,比较棘手. 对于此类问题,一般我们都有固定的分析流程.借助于JDK自带的一些分析工 ...

  8. JDK自带JVM性能调优监控工具jps、jstack、jmap、jhat、jstat

    原文地址:https://www.jianshu.com/p/db954cb968fb JVM性能调优监控工具jps.jstack.jmap.jhat.jstat位于JDK的bin目录,这些工具短小精 ...

  9. perfmon——使用windows系统自带的性能监视器监控进程信息

    第一次使用perfmon监控应用进程的信息,步骤总结如下: 第一部分 性能监视器 1.快捷键Win+R打开运行界面,输入“perfmon”命令后回车即可打开windows的性能监视器 2.点击“性能监 ...

随机推荐

  1. 题解【洛谷P2679】[NOIP2015]子串

    题面 看到求方案数,还要对 \(1000000007\ (1e9+7)\) 取模,一般这样的问题都要考虑 动态规划. 我们设 \(dp_{i,j,k,0/1}\) 表示 \(A_{1\dots i}\ ...

  2. WDatePicker使用 出现ReferenceError: disabledDates is not defined

    "ReferenceError: disabledDates is not defined at eval (eval at <anonymous> at HTMLInputEl ...

  3. Application Comparison Of LED Holiday Light And Traditional Incandescent Lights

    Obviously, LED holiday lights are leading the competition in economical Christmas decorations, but t ...

  4. LED Holiday Light - Holiday Lighting Maintenance Guide

    If you are experiencing problems with LED holiday lighting, the following guides will provide advice ...

  5. Python之旅第四天(列表、元祖、字典和习题)

    第四天,感觉时间还是过得很快,今天内容确实有点多,关于list的方法实在是太多了,元组tuple感觉有点鸡肋,可能得到后面才知道他的作用吧,然后是字典,看了很多关于字典的介绍,但是这货到底是干啥用的一 ...

  6. java基础(三)之面向对象编程

    对象的创建方法 语法: class 类名{ 属性; 方法; } 生成对象的方法 类名 对象名 = new 类名(); Dog dog = new Dog(); 对象的使用方法1.对象.变量;2.对象. ...

  7. springmvc的框架搭建及工作流程

    1.搭建要点 web.xml: <servlet-mapping>     <servlet-name>springDispatcherServlet</servlet- ...

  8. css div布局示例2(head-main-footer

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. ❀❀ 名词解释(PM、PD、UE、UI、RD....)

    PM:产品经理,项目负责人.一个产品,首先由PM来分析细分市场.目标客户的诉求,规划产品的卖点.杀手级应用,这个过程通常PD已经介入了,这个层面上,商业问题.业务逻辑的流畅是思考的焦点. 举凡产品从创 ...

  10. Flink流处理(五)- 状态与一致性模型

    状态(State)与一致性模型 接下来我们转向另一个在流处理中十分重要的点:状态(state).状态在数据处理中是无处不在的.为了产生一个结果,函数一般会聚合某个时间段内(或是一定数量的)events ...