HttpServer带阻塞性能比较
服务端在返回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带阻塞性能比较的更多相关文章
- 使用vs自带的性能诊断工具
visual studio是个强大的集成开发环境,内置了程序性能诊断工具.下面通过两段代码进行介绍. static void Main( string[] args) { Test1(); Test2 ...
- VS2010自带的性能分析工具分析.NET程序的性能
这篇博文给大家分享的是,如何使用VS自带的性能分析工具来分析我们编写的.NET程序,一边找出程序性能的瓶颈,改善代码的质量.在实际开发中,性能真的很重要,往往决定一个产品的生死~良好的用户体验的基础之 ...
- 011 - JDK自带的性能监控工具
一.概要: jps -l 查看现有的java进程 jps -l 显示所有正在运行的java进程id jstack 查看Java线程 jstack -l pid; 做thread du ...
- (转)MySQL自带的性能压力测试工具mysqlslap详解
mysqlslap 是 Mysql 自带的压力测试工具,可以模拟出大量客户端同时操作数据库的情况,通过结果信息来了解数据库的性能状况 mysqlslap 的一个主要工作场景就是对数据库服务器做基准测试 ...
- 数据库相关文章转载(2) MySQL自带的性能压力测试工具mysqlslap详解
PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用.其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的.下面举例说说.mysqlslap是从5.1.4版开始的一 ...
- (总结)MySQL自带的性能压力测试工具mysqlslap详解
PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用.其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的.下面举例说说.mysqlslap是从5.1.4版开始的一 ...
- 一些JDK自带的性能分析利器
有时候碰到服务器CPU飙升或者程序卡死之类的问题,一般都不太好定位.这类bug一般都隐藏的比较深并且还可能是偶发性的,比较棘手. 对于此类问题,一般我们都有固定的分析流程.借助于JDK自带的一些分析工 ...
- JDK自带JVM性能调优监控工具jps、jstack、jmap、jhat、jstat
原文地址:https://www.jianshu.com/p/db954cb968fb JVM性能调优监控工具jps.jstack.jmap.jhat.jstat位于JDK的bin目录,这些工具短小精 ...
- perfmon——使用windows系统自带的性能监视器监控进程信息
第一次使用perfmon监控应用进程的信息,步骤总结如下: 第一部分 性能监视器 1.快捷键Win+R打开运行界面,输入“perfmon”命令后回车即可打开windows的性能监视器 2.点击“性能监 ...
随机推荐
- 题解【洛谷P2679】[NOIP2015]子串
题面 看到求方案数,还要对 \(1000000007\ (1e9+7)\) 取模,一般这样的问题都要考虑 动态规划. 我们设 \(dp_{i,j,k,0/1}\) 表示 \(A_{1\dots i}\ ...
- WDatePicker使用 出现ReferenceError: disabledDates is not defined
"ReferenceError: disabledDates is not defined at eval (eval at <anonymous> at HTMLInputEl ...
- Application Comparison Of LED Holiday Light And Traditional Incandescent Lights
Obviously, LED holiday lights are leading the competition in economical Christmas decorations, but t ...
- LED Holiday Light - Holiday Lighting Maintenance Guide
If you are experiencing problems with LED holiday lighting, the following guides will provide advice ...
- Python之旅第四天(列表、元祖、字典和习题)
第四天,感觉时间还是过得很快,今天内容确实有点多,关于list的方法实在是太多了,元组tuple感觉有点鸡肋,可能得到后面才知道他的作用吧,然后是字典,看了很多关于字典的介绍,但是这货到底是干啥用的一 ...
- java基础(三)之面向对象编程
对象的创建方法 语法: class 类名{ 属性; 方法; } 生成对象的方法 类名 对象名 = new 类名(); Dog dog = new Dog(); 对象的使用方法1.对象.变量;2.对象. ...
- springmvc的框架搭建及工作流程
1.搭建要点 web.xml: <servlet-mapping> <servlet-name>springDispatcherServlet</servlet- ...
- css div布局示例2(head-main-footer
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ❀❀ 名词解释(PM、PD、UE、UI、RD....)
PM:产品经理,项目负责人.一个产品,首先由PM来分析细分市场.目标客户的诉求,规划产品的卖点.杀手级应用,这个过程通常PD已经介入了,这个层面上,商业问题.业务逻辑的流畅是思考的焦点. 举凡产品从创 ...
- Flink流处理(五)- 状态与一致性模型
状态(State)与一致性模型 接下来我们转向另一个在流处理中十分重要的点:状态(state).状态在数据处理中是无处不在的.为了产生一个结果,函数一般会聚合某个时间段内(或是一定数量的)events ...