18人参与 • 2026-09-15 • Linux
针对tomcat、jetty、undertow的详细对比,并结合spring boot的实际使用说明
| 特性 | tomcat | jetty | undertow |
|---|---|---|---|
| 开发方 | apache 基金会 | eclipse 基金会 | red hat(jboss/wildfly 子项目) |
| 定位 | 传统 servlet 容器 | 轻量级嵌入式服务器 | 高性能非阻塞服务器 |
| 核心协议 | http/1.1, 支持 http/2(需配置) | http/1.1, http/2, websocket | http/1.1, http/2, websocket |
| 主要应用场景 | 企业级 web 应用(如 spring mvc) | 微服务、嵌入式系统(如 spring boot) | 高并发 api、实时通信(如 websocket) |
| 维度 | tomcat | jetty | undertow |
|---|---|---|---|
| 架构模型 | 传统线程池(bio/nio可选) | 基于 nio 的非阻塞模型 | 基于 xnio 的事件驱动非阻塞模型 |
| 性能特点 | 高稳定性,中等并发能力 | 高并发处理,低延迟 | 极致性能,高吞吐量,低内存占用 |
| 资源消耗 | 较高(默认配置较保守) | 较低(轻量级设计) | 极低(优化内存管理) |
| 典型性能场景 | 500-1000 并发(默认配置) | 5000-10000 并发连接 | 10000+ 并发连接 |
| 功能 | tomcat | jetty | undertow |
|---|---|---|---|
| servlet 支持 | 完整支持(servlet 6.0+) | 完整支持(servlet 6.0+) | 完整支持(servlet 6.0+) |
| http/2 | 需手动配置(alpn 支持复杂) | 原生支持 | 原生支持 |
| websocket | 支持(需额外配置) | 原生支持 | 原生支持 |
| 模块化设计 | 无(功能集中) | 支持(按需加载模块) | 轻量级核心(扩展性强) |
| 嵌入式部署 | 支持(但较重) | 极佳(spring boot 默认替代选项) | 极佳(spring boot 可选集成) |
| 维度 | tomcat | jetty | undertow |
|---|---|---|---|
| 配置方式 | xml 文件,图形化管理工具(如 manager) | 代码/xml,强调 api 配置 | 代码/编程式配置(灵活性高) |
| 学习曲线 | 低(文档丰富,社区成熟) | 中(需理解 nio 模型) | 较高(需熟悉 xnio 事件模型) |
| 默认优化 | 保守(适合传统应用) | 较激进(适合现代架构) | 高度优化(性能优先) |
| 日志管理 | 完善(与 log4j 等集成) | 灵活(可定制日志组件) | 简洁(需手动配置扩展) |
| 维度 | tomcat | jetty | undertow |
|---|---|---|---|
| spring boot 默认支持 | ✅ 默认嵌入式容器(spring-boot-starter-web) | ❌ 需手动配置(替换 tomcat) | ❌ 需手动配置(替换 tomcat) |
| 启动速度 | 中等 | 较快 | 极快 |
| 内存占用 | 较高 | 较低 | 最低 |
| 并发能力 | 中等(bio/nio 模型) | 高(nio 非阻塞) | 极高(xnio 事件驱动) |
| 适用场景 | 传统 web 应用、jsp 项目 | 微服务、嵌入式设备 | 高并发 api、websocket 实时通信 |
选择 tomcat:
选择 jetty:
选择 undertow:
内存占用(空载):
响应时间(10k 并发):
吞吐量(qps):
依赖配置:无需额外配置,spring-boot-starter-web 默认包含 tomcat。
<!-- maven -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>自定义配置:
# application.yml
server:
port: 8080
tomcat:
max-threads: 200 # 最大线程数(默认 200)
min-spare-threads: 10 # 最小空闲线程数
connection-timeout: 5000依赖配置:需排除 tomcat 并添加 jetty 依赖。
<!-- maven -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
<exclusions>
<exclusion>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-tomcat</artifactid>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-jetty</artifactid>
</dependency>自定义配置:
# application.yml
server:
port: 8080
jetty:
thread-pool:
max-threads: 500 # jetty 默认线程池配置
min-threads: 10依赖配置:排除 tomcat 并添加 undertow 依赖。
<!-- maven -->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
<exclusions>
<exclusion>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-tomcat</artifactid>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-undertow</artifactid>
</dependency>自定义配置:
# application.yml
server:
port: 8080
undertow:
threads:
io: 4 # i/o 线程数(默认 cpu 核心数 * 2)
worker: 40 # 工作线程数(默认 io * 8)
buffer-size: 1024 # 缓冲区大小(字节)max-threads 和 min-spare-threads。server:
tomcat:
protocol: org.apache.coyote.http11.http11nioprotocol异步处理:利用 jetty 的异步 servlet 特性提升吞吐量。
调整 selector 线程:
@bean
public jettyservletwebserverfactory jettyservletwebserverfactory() {
jettyservletwebserverfactory factory = new jettyservletwebserverfactory();
factory.addservercustomizers(server -> {
queuedthreadpool threadpool = server.getbean(queuedthreadpool.class);
threadpool.setmaxthreads(500);
});
return factory;
}
优化 xnio 工作线程:根据 cpu 核心数动态调整 io 和 worker 线程。
启用直接内存缓冲:
server:
undertow:
direct-buffers: true # 使用堆外内存提升性能| 场景 | 推荐容器 | 理由 |
|---|---|---|
| 传统企业应用 | tomcat | 兼容性强,支持 jsp 和旧版 java ee 规范。 |
| 微服务/云原生应用 | jetty | 轻量级、启动快,适合资源受限的 docker 容器或 kubernetes 环境。 |
| 高并发 api/websocket | undertow | 极致性能,内存占用低,适合实时通信和高吞吐场景(如 im、游戏服务器)。 |
选择建议:根据项目需求权衡性能、资源消耗和开发体验。微服务或云原生场景可优先考虑 jetty 或 undertow;传统企业应用 tomcat 仍是稳妥选择。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论