实用指南:Tomcat | 三种运行模式详解
文章目录
免费个人运维知识库,欢迎您的订阅:literator_ray.flowus.cn
1.BIO (Blocking I/O) - 阻塞式 I/O 模型
BIO是阻塞式操作,采用的是传统的JAVA I/O处理模式,对于每一个请求都要创建一个线程来处理,因此开销比较大,不适合处理高并发的场景。
原理: BIO 采用传统的 Java I/O 处理模式,属于同步阻塞模型。
工作方式: 服务器为每一个接入的客户端连接请求创建一个独立的线程进行处理。该线程在 I/O 操作(如读取请求、写入响应)完成前会一直处于阻塞等待状态。
特点: 模型方便直观,易于理解。
缺点: 由于每个连接都需要一个专属线程,在高并发场景下会创建大量线程,导致显著的线程创建、销毁及上下文切换开销。这极大地消耗了系统资源(内存、CPU),使得 BIO 难以高效支撑高并发、高连接数的应用场景。
2.NIO (New I/O / Non-blocking I/O) - 非阻塞式 I/O 模型 (Tomcat 默认模式)
原理: NIO 基于 Java 提供的非阻塞 I/O API 实现(
java.nio包)。工作方式: 它利用多路复用技术(如 Selector),允许一个或少量线程管理大量的连接通道(Channel)。线程只在通道真正准备好进行 I/O 操作(数据可读或可写)时才进行处理,避免了线程在 I/O 等待时的阻塞。
特点: 相较于 BIO,NIO 显著减少了线程数量,降低了资源消耗。
优势: 具有更高的连接并发处理能力和资源利用率,是处理高并发请求的更优选择。因此,NIO 是 Tomcat 8 及以上版本的默认运行模式。
3.APR (Apache Portable Runtime) - 原生可移植运行时库
原理: APR 通过使用 Apache 可移植运行时库,直接调用操作系统底层的原生异步 I/O 能力(如 Linux 的 epoll,Windows 的 IOCP)。
工作方式: 它绕过了 JVM 自身的 I/O 完成,利用操作系统的高效 I/O 机制来处理网络通信和资料运行。
特点: 提供了接近操作系统原生性能的 I/O 处理能力。
优势: 能够大幅度提升 Tomcat 服务器的并发处理性能、吞吐量和稳定性,尤其在处理静态资源和高并发连接时表现优异。因此,APR 模式是生产环境中追求高性能 Tomcat 部署的常见选择之一。
4.Tomcat运行模式修改(切换至 APR)
前提条件: 要启用 APR 模式,需要额外安装两个组件:
Tomcat Native Library (
tomcat-native): 该库提供了 Tomcat 与 APR 交互的桥梁。在 Tomcat 8 及以上版本中,其二进制文件(如tcnative-1.dll或libtcnative-1.so)通常已包含在 Tomcat 安装包的bin目录下,但可能需要根据环境配置(如设置CATALINA_HOME或LD_LIBRARY_PATH/PATH)。APR 库本身: 需要在操作系统层面安装 APR 及其依赖(如 OpenSSL)。在 Linux 系统上,通常可以通过包管理器安装(例如
yum install apr apr-util openssl或apt-get install libapr1 libaprutil1 openssl)。Windows 系统可能需要下载预编译的二进制包。
修改配备: 安装好上述组件后,需要修改 Tomcat 的配置文件(通常是
conf/server.xml),找到 Connector 配置(如 HTTP/1.1 的 Connector),将其protocol属性值设置为org.apache.coyote.http11.Http11AprProtocol以启用 APR 模式。
请不要以此视为定论,这只是我的个人经验
浙公网安备 33010602011771号