spring boot tomcat原理(SpringBoot服务器压测对比)
spring boot tomcat原理(SpringBoot服务器压测对比)@RequestMapping(value = "/test" method = RequestMethod.GET) public void test() { }服务接口:指的是具有一定业务代码的接口,连接数据库/Redis然后返回json数据天花板:指的是一个空接口,没有任何实现,直接返回,如ab版本2.3jprofiler版本9.1.12、压测接口说明
1、本次对比基础环境信息如下:
springboot版本1.5.10
centos虚机4c6G,版本7.4
centos实机2u16c40G,版本7.4,虚机运行在实机上
ab版本2.3
jprofiler版本9.1.1
2、压测接口说明
天花板:指的是一个空接口,没有任何实现,直接返回,如
@RequestMapping(value = "/test" method = RequestMethod.GET)
public void test() {
}
服务接口:指的是具有一定业务代码的接口,连接数据库/Redis然后返回json数据
异步接口:指的是开启了http异步
3、压测过程
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 |
4、jprofiler图标对比
jetty
tomcat
UNDERTOW
5、附最佳线程数预估工具
GITHUB地址https://github.com/sunshanpeng/dark_magic 原文博客:http://ifeve.com/how-to-calculate-threadpool-size/
Undertow使用&优化:https://www.jianshu.com/p/e625b8aa0e80