前言
apr模式是从系统系别的角度去提高tomcat的并发量 是优化tomcat的首选 但是相比起来其他方式的话是相对稍微麻烦一点的 需要安装很多东西 ~
我们一步一步来看~
安装依赖相关的库
yum install apr-devel
yum install openssl-devel
yum install gcc
yum install make
openssl库要是0.9.7以上版本,APR要在1.2以上版本,可以使用rpm -qa | grep openssl 来查看安装的依赖库版本是不是大于或等于apr要求的版本。
安装apr动态库
进到tomcat的bin目录,解压tomcat-native.tar.gz文件,这个在tomcat bin目录下面是有的 并进入tomcat-native-1.2.7-src/native目录下面,执行 ./configure && make && make install 命令,动态库默认安装在/usr/local/apr/lib目录下
第三步
编辑$TOMCAT_HOME/bin/catalina.sh文件,在虚拟机启动参数JAVA_OPTS中添加java.library.path参数,指定apr库的路径
linux
EXPORT JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
windows
set JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
Tomcat8以下的版本,是需要指定运行的模式的,将protocol从HTTP/1.1改成org.apache.coyote.http11.Http11AprProtocol
要记得7以上版本默认就是nio模式的哦
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
运行之后查看日志信息 出现 [“http-apr-8080”] 字样 代表成功
如果出现错误 接着看 没错误就没事了
错误解释
如果没有配置SSL相关参数,并且开启了SSL,启动时会发生org.apache.tomcat.jni.Error: 70023: This function has not been implemented on this platform异常
关闭SSL
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
SpringBoot 内置 Tomcat 配置 APR
@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory();
if (true) {
tomcatFactory.setProtocol("org.apache.coyote.http11.Http11AprProtocol");
tomcatFactory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
Http11AprProtocol handler = (Http11AprProtocol)connector.getProtocolHandler();
handler.setXXX();//对tomcat进行对应的设置
}
});
}
return tomcatFactory;
}
开启了apr之后,jvm用到的native内存会增大,因此要适当调大Metaspace空间,添加JVM选项:-XX:MetaspaceSize=128m 在jdk8中的时候 元空间 是 直接和 本地内存打交道的
结语
tomcat的介绍大致就到这里啦 后续出一个 在 linux 中 安装apache进行ab压测的文章~ 要记得多参考 多阅读哦 知识都是互相传递的~