(麻烦看这篇的大大们,穿越到这https://my.oschina.net/shyloveliyi/blog/2980868)git
一、本次对比基础环境信息以下:github
springboot版本1.5.10spring
centos虚机4c6G,版本7.4数据库
centos实机2u16c40G,版本7.4,虚机运行在实机上json
ab版本2.3centos
jprofiler版本9.1.1tomcat
二、压测接口说明springboot
天花板:指的是一个空接口,没有任何实现,直接返回,如服务器
@RequestMapping(value = "/test", method = RequestMethod.GET) public void test() { }
服务接口:指的是具备必定业务代码的接口,链接数据库/Redis而后返回json数据mvc
异步接口:指的是开启了http异步
三、压测过程
JETTY
先以Jetty开始,这里经过优化参数来不断摸底。如下是参数说明:
jettyMin:最小链接数
jettyMax:最大链接数
mvcCore:线程池core数量
mvcMax:线程池最大量
mvcQueue:线程池队列大小
大体结果以下:
JETTY天花板(无异步) | ||||
jettyMin | 50 | 100 | 200 | 300 |
jettyMax | 600 | 600 | 600 | 600 |
mvcCore | 50 | 50 | 50 | 50 |
mvcMax | 200 | 200 | 200 | 200 |
mvcQueue | 100 | 100 | 100 | 100 |
结果 | 2090 | 2116 | 2374 | 2100 |
JETTY天花板(无异步) | |||
jettyMax | 400 | 600 | 800 |
jettyMin | 200 | 200 | 200 |
mvcCore | 50 | 50 | 50 |
mvcMax | 200 | 200 | 200 |
mvcQueue | 100 | 100 | 100 |
结果 | 1655 | 2170 | 2000 |
JETTY天花板(异步) | |||
jettyMax | 600 | 600 | 600 |
jettyMin | 200 | 200 | 200 |
mvcCore | 50 | 100 | 200 |
mvcMax | 200 | 200 | 200 |
mvcQueue | 100 | 100 | 100 |
结果 | 1500 | 1600 | 1450 |
JETTY天花板(异步) | |||
jettyMax | 600 | 600 | 600 |
jettyMin | 200 | 200 | 200 |
mvcCore | 100 | 100 | 100 |
mvcMax | 200 | 400 | 600 |
mvcQueue | 100 | 100 | 100 |
结果 | 1600 | 1700 | 1550 |
JETTY天花板(异步) | |||
jettyMax | 600 | 600 | 600 |
jettyMin | 200 | 200 | 200 |
mvcCore | 100 | 100 | 100 |
mvcMax | 400 | 400 | 400 |
mvcQueue | 100 | 200 | 300 |
结果 | 1600 | 1700 | 1600 |
如下是经过工具预估最佳线程数,而后修改优化参数的结果:
JETTY天花板(无异步) | |||
jettyMax | 600 | 52 | |
jettyMin | 200 | 52 | |
mvcCore | 52 | 52 | |
mvcMax | 52 | 52 | |
mvcQueue | 199 | 199 | |
结果 | 1520 | 1600 |
JETTY业务接口(异步) | |||
jettyMax | 600 | ||
jettyMin | 200 | ||
mvcCore | 52 | ||
mvcMax | 52 | ||
mvcQueue | 199 | ||
结果 | 1719 |
JETTY业务接口(无异步) | |||
jettyMax | 600 | ||
jettyMin | 200 | ||
mvcCore | 52 | ||
mvcMax | 52 | ||
mvcQueue | 199 | ||
结果 | 2000 |
经过以上结果发现一个问题,开启异步HTTP后压测的结果均不如不开启HTTP异步的结果。
TOMCAT
经过切换成tomcat再按照以上过程压测,发现HTTP和tomcat才是天生一对,组合压测下的结果和Jetty不开启异步的结果差很少。这里再也不重复贴出数据表格。
UNDERTOW
经过Jetty和tomcat的压测结果发现,HTTP异步并不必定会提高程序性能,只有在特定的条件下才会起到正面的效果,如应用服务器为非NIO时。而undertow和jetty同样是NIO,因此这里再也不对比异步非异步,直接只测非异步。优化参数只有两个:
ioThreads:cpu核数
workerThreads:工做线程数(能够经过工具预估出来)
如下是数据。
UNDERTOW业务接口(无异步) | |||
ioThreads | 4 | ||
workerThreads | 52 | ||
结果 | 2200 |
UNDERTOW天花板(无异步) | |||
ioThreads | 4 | ||
workerThreads | 52 | ||
结果 | 3100 |
四、jprofiler图标对比
jetty
tomcat
UNDERTOW
五、附最佳线程数预估工具
GITHUB地址https://github.com/sunshanpeng/dark_magic 原文博客:http://ifeve.com/how-to-calculate-threadpool-size/
Undertow使用&优化:https://www.jianshu.com/p/e625b8aa0e80