SpringBoot 内嵌容器的比较
Spring Boot内嵌容器支持Tomcat、Jetty、Undertow。为什么选择Undertow?
这里有一篇文章,时间 2017年1月26日发布的:
参考
Tomcat vs. Jetty vs. Undertow: Comparison of Spring Boot Embedded Servlet Containers
文章打开比较慢,大致是一下几点:
- spring boot 项目建立
- 如何修改 三种 内置的容器(默认是tomcat)
- 对三种配置进行测试(测试工具jmeter):此处测试分为两种
- 简单的String返回
- 复杂的json结果返回
- JVisualVM 查看请求过程中堆内存的变化。
- 分析结果:undertow 以微弱的优势胜出 undertow > tomcat > jetty
- 总结:例子并不能看出undertow 有很大的优势,但是可以看出的是,undertow 在适应新的趋势发展和尝试长连接(从响应头中可以看出)的使用。
回顾
SpringBoot 内置了三种servlet 容器供大家选择,默认的是tomcat,说明它还是大众最多的选择。另外,也可以看出另外两种也还是有自己独有的优势。
从另一方面来说,SpringBoot 提供的默认配置也不一定正确,对于版本的使用和兼容,不一定很全,还是需要根据压测之后才可以确定。
附 undertow 配置参考
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置为可用的CPU 核数
# 不要设置过大,如果过大,启动项目会报错:打开文件数过多
server.undertow.io-threads=16
# 阻塞任务线程池, 当执行类似servlet请求阻塞IO操作, undertow会从这个线程池中取得线程
# 它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8
server.undertow.worker-threads=256
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理。默认为 JVM 可用的最大空间
# 每块buffer的空间大小,越小的空间被利用越充分,不要设置太大,以免影响其他应用,合适即可
server.undertow.buffer-size=1024
# 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region
# 新版本已被废弃
server.undertow.buffers-per-region=1024
# 是否分配的直接内存(NIO直接分配的堆外内存)
server.undertow.direct-buffers=true
undertow 和 jetty 对比
引用ref:https://www.cnblogs.com/maybo/p/7784687.html
- 都是基于NIO实现的高并发轻量级服务器。
- 对于服务器端,我们关注的重点不是连接超时时间、socket超时时间以及任务执行超时时间的配置,而是线程池配置,包括工作线程和IO线程的分配。
- Jetty 使用全局的线程配置,最小8,最大200.
- Undertow 用于IO线程数同CPU 核数,工作线程数=IO*8
- 在负载小的情况下,三款服务器都有很好的性能。
- 在负载逐渐增大的时候,jetty 因为是全局的线程池配置,会出现阻塞情况。undertow 和 tomcat 表现良好。
- tomcat 的IO线程不可通过SpringBoot 调整,而Undertow 可配置。
SpringBoot 内嵌容器的比较的更多相关文章
- spring-boot内嵌三大容器https设置
spring-boot内嵌三大容器https设置 spring-boot默认的内嵌容器为tomcat,除了tomcat之前还可以设置jetty和undertow. 1.设置https spring-b ...
- SpringBoot项目启动不走内嵌容器
一.问题 springboot项目java -jar启动不走内嵌容器,如下图,可以看到是直接走系统环境变量里配置的tomcat容器了 二.分析 我的pom.xml文件关键依赖: <depende ...
- Spring Boot项目的内嵌容器
一.关于容器 刚才开始使用spring boot的开发者会有种很直观的感觉,servlet容器“不见了”.之前开发web项目,都是把程序写完后部署到servlet容器(比如Tomcat),但是使用sp ...
- 【Spring Boot】内嵌容器
Spring Boot内嵌容器支持Tomcat.Jetty.Undertow. tomcat容器 spring boot 的web应用开发必须使用spring-boot-starter-web,其默认 ...
- 查看和指定SpringBoot内嵌Tomcat的版本
查看当前使用的Tomcat版本号 Maven Repository中查看 比如我们需要查Spring Boot 2.1.4-RELEASE的内嵌Tomcat版本, 可以打开链接: https://mv ...
- SpringBoot内嵌Tomcat开启APR模式(运行环境为Centos7)
网上查到的一些springboot内嵌的tomcat开启apr的文章,好像使用的springboot版本较老,在SpringBoot 2.0.4.RELEASE中已经行不通了.自己整理了一下,供参考. ...
- Spring Boot 内嵌容器 Tomcat / Undertow / Jetty 优雅停机实现
Spring Boot 内嵌容器 Tomcat / Undertow / Jetty 优雅停机实现 Anoyi 精讲JAVA 精讲JAVA 微信号 toooooooozi 功能介绍 讲解java深层次 ...
- Spring Boot 容器选择 Undertow 而不是 Tomcat Spring Boot 内嵌容器Unde
Spring Boot 内嵌容器Undertow参数设置 配置项: # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程 # 不要设置过大,如果过大,启动 ...
- spring-boot开发:使用内嵌容器进行快速开发及测试
一.简述一下spring-boot微框架 1.spring-boot微框架是什么? 大家都知道,在使用spring框架进行应用开发时需要很多*.xml的初始化配置文件,而springBoot就是用来简 ...
随机推荐
- AA:白细胞计数
总时间限制: 1000ms 内存限制: 65536kB 描述 医院采样了某临床病例治疗期间的白细胞数量样本n份,用于分析某种新抗生素对该病例的治疗效果.为了降低分析误差,要先从这n份样本中去除一个 ...
- java类private/this的使用
package 类的练习; public class Person { private String name; private int age; private String sex; privat ...
- 『CDN』让你的网站访问起来更加柔顺丝滑
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...
- springmvc跨域问题
1.跨域问题: 按照网上所有的方法试了一遍,都没跨过去,正在无助之际,使用filter按照下面的方法解决的时候出现了转机: 添加filter: package com.thc.bpm.filter; ...
- java并发编程实战《二十一》无锁工具类
不安全的累加代码,如下 1 public class Test { 2 long count = 0; 3 void add10K() { 4 int idx = 0; 5 while(idx++ & ...
- PyQt(Python+Qt)学习随笔:QColumnView的resizeGripsVisible属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QColumnView在一个视图中展示多个列表,每个下级列表是上一个列表的数据项的分支, QColu ...
- PyQt学习随笔:通过自定义类重写QApplication的notify方法捕获应用的所有消息
PyQt程序通过调用QApplication类的exec_()(sys.exit(app.exec_()) 进入程序主循环,开始处理事件,它从事件队列中获取本地窗口系统事件,将它们转化为 QEvent ...
- FFmpeg在Android Studio中断点调试
一般情况下在Android平台使用FFmpeg为动态库或静态库的形式,只能通过设置FFmpeg日志回调来看一些FFmpeg输出的日志,有时需要debug来查看FFmpeg内部执行过程,本文记录一下在A ...
- 使用postman发送http请求
postman使用详解: http://gold.xitu.io/entry/57597a62a341310061337885 https://www.getpostman.com/docs/writ ...
- Python实现自动整理文件
前言 工作上的文档和资料好几个月没整理了,因为平常太忙都是随手往桌面丢.整个桌面杂乱无章全是文档和资料.几乎快占满整个屏幕了,所有我必须要整理一下了.但是手动整理太费时间了,于是我想到了python. ...