目录
1 Tomcat Connector运行模式
1.1 BIO 模式
1.2 NIO 模式
1.3 APR模式
2 修改Tomcat Connector运行模式为apr 或者解决问题The APR not found 问题
2.1 linux系统
2.2 windows处理
1 Tomcat Connector运行模式
1.1 BIO 模式
BIO模式(blocking I/O):指阻塞式I/O操作,Tomcat在默认情况下是以bio模式运行的。
简明来说就是:每个客户端连接过来的,服务器都会启动一个线程来处理客户端的请求。
BIO模式的缺点:
当客户端较多时,会创建大量的处理线程,每个线程都会占用栈空间和一些cpu时间。
阻塞可能带来频繁的上下文切换,而大部分的上下文切换时无意义的。
总结一句话:并发量高时,线程数较多,浪费资源。
Tomcat7及其以下,在Linux系统中默认使用这种模式。
1.2 NIO 模式
nio模式(non-blocaking I/O):指非阻塞I/O操作,nio是一个基于缓冲区并能提供非阻塞I/O操作的JavaAPI,它拥有比bio更好的并发运行性能,想要Tomcat以nio模式运行我们需要修改server.xml文件。
Nio模式工作原理:
1.由一个专门的线程来处理所有的 I/O 事件、并负责分发。
2.事件驱动机制,而不再同步地去监视事件。
3.线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的,减少无谓的线程切换。
比较高深,纯属技术用语:
NIO采用了双向通道(channel)进行数据传输,而不是单向的流(stream)。在通道上我们可以注册指定的事件,一共有以下四种事件:
1.服务端接收客户端连接事件OP_ACCEPT(16)
2.客户端连接服务端事件 OP_CONNECT(8)
3.读事件 OP_READ(1)
4.写事件 OP_WRITE(4)
服务端和客户端各自维护一个管理通道的对象,我们称之为selector,该对象能检测一个或多个通道上的事件。以服务端为例,如果服务端的selector上注册了读事件,某时刻客户端给服务端发送了一些数据,BIO这时会调用read()方法阻塞地读取数据,而NIO的服务端会在selector中添加一个读事件。服务端的处理线程会轮询地访问selector,如果访问selector时发现有感兴趣的事件到达则处理这些事件;如果没有感兴趣的事件到达则处理线程会一直阻塞,直到感兴趣的事件到达为止。
1.3 APR模式
apr(Apache portable Run-time libraries/Apache可移植运行库)是Apache HTTP服务器的支持库。在apr模式下,Tomcat将以JNI(Java Native Interface)的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大提高Tomcat对静态文件的处理性能。Tomcat apr是在Tomcat上运行高并发应用的首选模式。
而要让Tomcat以apr模式运行,
对于Tomcat 7.0.30开始向后的版本,只需要再次修改protocol为”org.apache.coyote.http11.Http11AprProtocol”即可。
对于Tomcat 7.0.30之前的版本,还需要以下三个组件的支持:
1.APR library[APR库]
2.JNI wrappers for APR used by Tomcat (libtcnative)[Windows操作系统上一个名为tcnative-1.dll的动态链接库文件]
3.OpenSSL libraries[OpenSSL库]
2 修改Tomcat Connector运行模式为apr 或者解决问题The APR not found 问题
2.1 linux系统
问题:
Spring Boot 报错The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on linux
安装包下载地址
前提:已经安装jdk
1.安装apr
[root]# tar -zxvf apr-1.7.0.tar.gz
[root]# cd apr-1.7.0
[roo]# ./configure --prefix=/usr/local/apr
[root]# make
[root]# make install
2.安装 tar -zxvf tomcat-native-1.2.26-src.tar.gz
[root]# tar -xzvf tar -zxvf tomcat-native-1.2.26-src.tar.gz
[root]# cd tomcat-native-1.2.26-src/native
[root]# ./configure --with-apr=/usr/local/apr
[root]# make
[root]# make install
3将编译的/usr/local/apr/lib 文件全部放到新服务器/usr/lib下即可。库文件是存在软链接的,可以手动创建,也可以不做。