Tomcat(Apache Tomcat)
核心定位
由 Apache 软件基金会维护,是 最广泛使用的 Servlet/JSP 容器,实现了完整的 Java EE 规范(Servlet、JSP、JSTL 等)最新版本为 11.0.0(支持 Servlet 5.0、JSP 3.0)架构与特性
分层架构:连接器层(HTTP/HTTPS/AJP)、容器层(Servlet/JSP 生命周期管理)、应用层(Web 应用部署)
成熟生态:提供图形化管理界面(如 Manager App),支持 SSL、连接池、集群部署等企业级功能
线程模型:默认 NIO 模式(Tomcat 8+),支持 BIO(已淘汰)和 APR(高性能原生库)
性能表现:默认并发能力:约 5,000 并发连接,吞吐量 20k–25k QPS(NIO 模式)
资源消耗:内存与 CPU 占用较高,启动速度较慢
适用场景:企业级传统应用(需完整 Java EE 支持)、JSP/Servlet 项目、需图形化运维的大型系统
⚡ Undertow(Red Hat)
核心定位
高性能非阻塞服务器,内置于 WildFly 应用服务器,设计目标为 低延迟、高吞吐、轻量化,支持 Servlet 3.1、HTTP/2、WebSocket 及低级非阻塞 API架构与特性
组合式架构:通过链式 Handler 灵活构建功能,可嵌入应用或独立运行(核心 JAR <1MB)
线程模型:基于 NIO 的异步事件驱动,支持动态调整 IO/Worker 线程池
资源效率:内存占用最低(<4MB 堆内存),CPU 利用率优化显性能表现
默认并发能力:约 10,000 并发连接,吞吐量 30k–35k QPS(领先同类)
响应稳定性:高并发下延迟控制最佳,尤其适合短连接场景(如 REST API)适用场景
高并发微服务(Spring Boot 默认嵌入)、云原生应用、实时通信(WebSocket)、资源受限环境
🚀 Jetty(Eclipse Jetty)
核心定位
由 Eclipse 基金会维护,定位为 轻量级嵌入式服务器,强调快速启动与模块化扩展,支持 Servlet 3.1、HTTP/2、WebSocket,API 设计简洁架构与特性
模块化设计:可裁剪非必要模块(如仅启用 HTTP 模块),启动速度最快
嵌入灵活性:通过数行代码即可嵌入 Java 应用,适合工具类开发
生态兼容:与 Maven/Gradle 深度集成,支持热部署性能表现
默认并发能力:约 8,000 并发连接,吞吐量 25k–28k QPS(介于 Tomcat 与 Undertow 之间)
响应速度:静态请求处理延迟最低适用场景
嵌入式系统(IoT 设备)、微服务网关、持续集成测试环境、需快速迭代的项目
📊 三者在关键指标上的对比
维度 | Tomcat | Undertow | Jetty |
---|---|---|---|
吞吐量(QPS) | 20k–25k 1 2 |
30k–35k 1 2 |
25k–28k 1 2 |
并发能力 | ~5,000 1 |
~10,000 1 |
~8,000 1 |
内存占用 | 高 1 4 |
最低 1 5 |
中等 5 |
启动速度 | 较慢 1 |
快 9 |
最快 1 13 |
企业级特性 | 完整支持 6 8 |
有限 1 |
部分支持 12 |
适用场景 | 传统企业应用 4 |
高并发微服务 3 10 |
嵌入式/轻量级服务 13 |
💎 总结建议
- 选 Tomcat:需完整 Java EE 支持、成熟运维工具的传统项目
- 选 Undertow:追求极限性能的云原生微服务、资源敏感型应用
- 选 Jetty:嵌入式开发、快速原型验证或模块化需求强烈的场景
性能数据受测试环境(如 JVM 参数、硬件配置)影响,建议结合实际场景压测验证
源码级优化参考:
- Tomcat:调整
maxThreads
、启用异步处理- Undertow:配置
io-threads
与worker-threads
- Jetty:模块化裁剪减少资源占用