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

程序那点儿事 2018-12-29 18:13:09 ⋅ 592 阅读

作者:尚浩宇

原文地址:https://my.oschina.net/shyloveliyi/blog/2980440


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



---------------END----------------

后续的内容同样精彩

长按关注“IT实战联盟”哦





全部评论: 0

    我有话说:

    Apache Tomcat 8.5.59、9.0.39和10.0.0-M9发布

    Apache Tomcat 8.5.59, 9.0.39 和 10.0.0-M9 已发布。 8.5.x 已取代 8.0.x,并增加了从 Tomcat 9.0.x 中吸收的新功能。与 8.5.58

    Spring Cloud 升级之路 - 2020.0.x - 2. 使用 Undertow 作为我们的 Web 服务容器

    https://juejin.cn/post/6948036822303768590 在我们的项目中,我们没有采用默认的 Tomcat 容器,而是使用了 UnderTow 作为我们的容器。其实性能上

    精品推荐:Tomcat优化总结(实战版)

    Tomcat是我们经常使用的 servlet容器之一,甚至很多线上产品都使用 Tomcat充当服务器

    smart-http 1.0.18 发布,轻量级的国产 HTTP 服务器

    smart-http 是一款采用 Java 语言编写的 Http 服务器,有别于业界知名的 Web容器:TomcatUndertow,smart-http 并不支持 Servlet 规范,但对于

    Eclipse Jetty 9.4.40 发布

    Eclipse Jetty 9.4.40 已发布,此版本包含 bugfix 和功能改进,可从项目下载页面或 Maven Central 仓库获取: Eclipse

    SpringBoot+zk+dubbo架构实践(一):本地部署zookeeper

    SpringBoot+zk+dubbo架构实践系列实现目标:自己动手搭建微服务架构

    「尝鲜」SpringBoot 快速整合Swagger 3.0

    第一步:Maven引入Swagger3.0 starter依赖 Maven项目中引入springfox-boot-starter依赖: <dependency> <groupId>io.springfox<...

    【超全教程】SpringBoot 2.3.x 分层构建 Docker 镜像实践

    作者:超级小豆丁 http://www.mydlq.club/article/98/ 目录 什么是镜像分层 SpringBoot 2.3.x 新增分层的支持 创建测试的 SpringBoot

    服务架构实战篇:快速入手SpringBoot 2.0,欢迎入坑哦~~~

    SpringBoot 2.0 基本要求Java最低要求8以上,不再支持Java 6 和 7等低版本。

    【开源资讯】Spring Boot 2.4.0.M4 发布

    Spring Boot 2.4.0 的第四个里程碑版本发布了,可以从里程碑仓库获取。此版本包含 145 项更新内容,亮点如下:1、改进故障分析器(Failure Analyzer)2、能够发布由 Maven 和 Gradle ...

    Dubbo3.0 来了:服务发现百万集群,可伸缩微服务架构

    来自:高可用架构原文:https://mp.weixin.qq.com/s/_Ih4AyL2c1JjyLwKCPmphg 本文是一篇关于 Dubbo 地址推送性能的文章,我们期望通过对比的方式

    【开源资讯】JWCloud 专业版 v1.0.0 发布,基于 SpringCloud 研发的微服务框架

    简介 JavaWeb_Cloud 微服务平台是一款基于 SpringCloud 框架研发的分布式微服务框架,主要使用技术栈包括: SpringCloud、Vue、ElementUI

    架构实战篇(十六):Spring Boot Assembly服务化打包

    使用assembly来打包springboot服务项目,让发布更简单

    「开源资讯」Apache Tomcat 8.5.49 发布

    更新说明Apache Tomcat 8.5.49 发布了。8.5.x 替换了 8.0.x,并包含了一些从 9

    Nodejs 接入 公众号【逗版】

    Nodejs 接入 公众号 需求:Boss: 我们要接入公众号,你看下文档接下。Me: 🆗 然后,可能因为腾讯的反感,加之网上腾讯的吐槽,怀着愤世嫉俗的态度胡乱的找资源,看方案

    SpringBoot+zk+dubbo架构实践(五):搭建微服务电商架构(内附GitHub地址)

    集成了mybatis和swagger让接口可视化并完成了一些增删改查的基础业务,了还有个分页查询!

    Pyston v2 发布: Python 快 20%

    Pyston v2 已正式发布,Pyston 是 Python 的高度兼容实现,自称 Python 更快。根据 Pyston 提供的宏基准测试结果,其 v2 版本目前的 Python 3.8 快

    1分钟搞定Centos7/Linux中Tomcat安装SSL证书

    架构运维篇(四):Centos7/Linux中Tomcat安装SSL证书实践