概要
环境搭建
1.apr安装
解压apr包,默认安装目录在 /usr/local/apr 可以通过—prefix=xxx修改
cd apr && sudo ./configure && sudo make && sudo make install
2.openssl安装
Mac系统
brew install openssl
linux系统
In debian based Linux those dependencies could be installed by something like:
apt-get install libapr1.0-dev libssl-dev
In rpm based Linux those dependencies could be installed by something like:
yum install apr-devel openssl-devel
3.tomcat-native安装
下载tomcat-native 然后解压。
cd /tomcat-native/native/ -\
&& sudo ./configure --with-apr=/usr/local/apr --with-ssl=/usr/local/opt/openssl -\
--with-java-home=此处换成你本地的jdk地址指定到jdk目录#/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home -\
&& sudo make && sudo make install
编译成功后,会在/usr/local/apr/lib下有libtcnative-1.0.dylib的库文件,这个就是tomcat启动的依赖库
需要把该文件拷贝到jdk的Extensions目录下就行
sudo cp /usr/local/apr/lib/libtcnative-1.dylib /Library/Java/Extensions/
开启apr模式
spring boot中开启apr模式
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory(){
TomcatServletWebServerFactory serverFactory = new TomcatServletWebServerFactory();
//设置协议为http1.1
serverFactory.setProtocol(Constants.HTTP_11);
Collection<LifecycleListener> listeners = serverFactory.getContextLifecycleListeners();
listeners.forEach(lifecycleListener -> {
if (lifecycleListener instanceof AprLifecycleListener) {
AprLifecycleListener aprLifecycleListener = (AprLifecycleListener) lifecycleListener;
//使用apr
aprLifecycleListener.setUseAprConnector(true);
}
});
return serverFactory;
}
tomcat
- 修改protocol值
Tomcat默认是HTTP/1.1,如果运行apr模式需要把protocol值修改成apr模式:org.apache.coyote.http11.Http11AprProtocol
# vi server.xml
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
- 修改SSLEngine
# vi server.xml
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
启动
如上图表示启动成功
压测
总结
- AprEndpoint:用C实现,通过JNI调用的。主要提升对静态资源(如HTML、图片、CSS、JS等)的访问性能。
- AprEndpoint和NioEndpoint在性能上基本接近
结论:前后端分离的项目推荐使用Nio方式,不分离项目可以尝试开启apr模式
apr模式需要环境支持