SpringBoot服务器压测对比(jetty、tomcat、undertow)

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天花板(无异步)jettyMin50100200300jettyMax600600600600mvcCore50505050mvcMax200200200200mvcQueue100100100100结果2090211623742100

JETTY天花板(无异步)jettyMax400600800jettyMin200200200mvcCore505050mvcMax200200200mvcQueue100100100结果165521702000

JETTY天花板(异步)jettyMax600600600jettyMin200200200mvcCore50100200mvcMax200200200mvcQueue100100100结果150016001450

JETTY天花板(异步)jettyMax600600600jettyMin200200200mvcCore100100100mvcMax200400600mvcQueue100100100结果160017001550

JETTY天花板(异步)jettyMax600600600jettyMin200200200mvcCore100100100mvcMax400400400mvcQueue100200300结果160017001600

以下是通过工具预估最佳线程数,然后修改优化参数的结果:

JETTY天花板(无异步)jettyMax60052 jettyMin20052 mvcCore5252 mvcMax5252 mvcQueue199199 结果15201600

JETTY业务接口(异步)jettyMax600 jettyMin200 mvcCore52 mvcMax52 mvcQueue199 结果1719

JETTY业务接口(无异步)jettyMax600 jettyMin200 mvcCore52 mvcMax52 mvcQueue199 结果2000

通过以上结果发现一个问题,开启异步HTTP后压测的结果均不如不开启HTTP异步的结果。

TOMCAT

通过切换成tomcat再按照以上过程压测,发现HTTP和tomcat才是天生一对,组合压测下的结果和Jetty不开启异步的结果差不多。这里不再重复贴出数据表格。

UNDERTOW

通过Jetty和tomcat的压测结果发现,HTTP异步并不一定会提升程序性能,只有在特定的条件下才会起到正面的效果,如应用服务器为非NIO时。而undertow和jetty一样是NIO,所以这里不再对比异步非异步,直接只测非异步。优化参数只有两个:

ioThreads:cpu核数

workerThreads:工作线程数(可以通过工具预估出来)

以下是数据。

UNDERTOW业务接口(无异步)ioThreads4 workerThreads52 结果2200

UNDERTOW天花板(无异步)ioThreads4 workerThreads52 结果3100

4、jprofiler图标对比

jetty

SpringBoot服务器压测对比(jetty、tomcat、undertow)

SpringBoot服务器压测对比(jetty、tomcat、undertow)

tomcat

SpringBoot服务器压测对比(jetty、tomcat、undertow)

SpringBoot服务器压测对比(jetty、tomcat、undertow)

UNDERTOW

SpringBoot服务器压测对比(jetty、tomcat、undertow)

SpringBoot服务器压测对比(jetty、tomcat、undertow)

5、附最佳线程数预估工具

GITHUB地址https://github.com/sunshanpeng/dark_magic 原文博客:http://ifeve.com/how-to-calculate-threadpool-size/

相关推荐