背景
tomcat Connector三种运行模式对比:
● Bio
一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。
● Nio
利用Java的异步IO处理,可以通过少量的线程处理大量的请求。
Linux系统下Tomcat8默认使用nio模式。
● Apr
Apache Portable Runtime,从操作系统级别解决异步IO问题,大幅度提高服务器的并发处理性能。
Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作。
Win7及更高版本系统中,Tomcat 7/8/9默认使用apr模式,Linux系统中需要手动配置。
软件包准备
apr-1.7.0.tar.gz
apr-util-1.6.1.tar.gz
apr-iconv-1.2.2.tar.gz
openssl-1.1.1g.tar.gz
apache-tomcat-9.0.34.tar.gz
jdk-8u202-linux-x64.tar.gz
● 操作系统:CentOS7.6
● 软件包保存路径:/tmp
● 服务器内存:8G
yum install -y gcc gcc-c++ automake autoconf libtool* expat-devel per perl-devel
cd /tmp/
wget http://10.10.0.100/download/apr-1.7.0.tar.gz
wget http://10.10.0.100/download/apr-util-1.6.1.tar.gz
wget http://10.10.0.100/download/apr-iconv-1.2.2.tar.gz
wget http://10.10.0.100/download/openssl-1.1.1g.tar.gz
wget http://10.10.0.100/download/apache-tomcat-9.0.34.tar.gz (新版tomcat可见 http://mirrors.mjm.com/package/tomcat 目录下的安装包)
wget http://10.10.0.100/download/jdk-8u202-linux-x64.tar.gz
安装JDK
mkdir /usr/local/java
tar -zxvf /tmp/jdk-8u202-linux-x64.tar.gz -C /usr/local/java/
vim /etc/profile #加入以下5行
#mjm Custom settings
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export JAVA_HOME=/usr/local/java/jdk1.8.0_202
export PATH=$PATH:${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/jre/lib
source /etc/profile #使jdk配置生效
安装apr及openssl
tar -zxvf /tmp/apr-1.7.0.tar.gz
cd /tmp/apr-1.7.0
sed -i '31279s/$RM/$RM\ -f/g' configure #防止configure操作出现rm: cannot remove `libtoolT': No such file or directory报错
./configure --prefix=/usr/local/apr
make && make install
tar -zxvf /tmp/apr-iconv-1.2.2.tar.gz
cd /tmp/apr-iconv-1.2.2
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
make && make install
tar -zxvf /tmp/apr-util-1.6.1.tar.gz
cd /tmp/apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
make && make install
tar -zxvf /tmp/openssl-1.1.1g.tar.gz
cd /tmp/openssl-1.1.1g
./config --prefix=/usr/local/openssl
make && make install
安装tomcat及tomcat-native
tar -zxvf /tmp/apache-tomcat-9.0.34.tar.gz -C /opt/
mv /opt/apache-tomcat-9.0.34 /opt/tomcat-9.0.34
cd /opt/tomcat-9.0.34/bin
tar -zxvf tomcat-native.tar.gz
cd /opt/tomcat-9.0.34/bin/tomcat-native-1.2.23-src/native
./configure --with-java-home=/usr/local/java/jdk1.8.0_202 --with-apr=/usr/local/apr --with-ssl=/usr/local/openssl
make && make install
配置tomcat
vim /opt/tomcat-9.0.34/conf/server.xml
#找到SSLEngine="on"所在行,将其改为
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
#找到port="8080" protocol="HTTP/1.1"对应的Connector部分,将其改为
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" URIEncoding='UTF-8' />
#找到port="8009" protocol="AJP/1.3"对应的Connector部分,将其改为
<Connector port="8009" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" />
vim /opt/tomcat-9.0.34/bin/catalina.sh
#找到cygwin=false这一行,在其上方添加如下内容:
JAVA_OPTS="-server -Xms6144mm -Xmx6144m -XX:NewSize=256m -XX:MaxNewSize=512m -Djava.library.path=/usr/local/apr/lib"
#配置中Xms,Xmx,XX各项设置根据服务器内存实际大小来调整JVM设置,例如Xms和Xmx按照物理内存的2/3或者3/4来设置。
系统优化
echo "* soft nofile 655350" >> /etc/security/limits.conf
echo "* hard nofile 655350" >> /etc/security/limits.conf
sed -i 's/4096/655350/g' /etc/security/limits.d/20-nproc.conf
sed -i 's/#DefaultLimitCORE=/DefaultLimitCORE=infinity/g' /etc/systemd/system.conf
sed -i 's/#DefaultLimitNOFILE=/DefaultLimitNOFILE=100000/g' /etc/systemd/system.conf
sed -i 's/#DefaultLimitNPROC=/DefaultLimitNPROC=100000/g' /etc/systemd/system.conf
[备注]:此处配置需重启电脑生效。
vim /etc/sysctl.d/99-sysctl.conf
net.ipv4.ip_local_port_range = 10240 65535
执行sysctl -p生效。
vim /etc/profile
#结尾加入两行
export LD_LIBRARY_PATH=/lib:/lib64:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/apr/lib
执行source /etc/profile生效。
检查tomcat运行模式
● 方法一
vim /opt/tomcat-9.0.34/conf/tomcat-users.xml
#在倒数第二行位置,加入如下内容:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<role username="tomcat" password="tomcat" roles"admin-gui,admin,manager-gui,manager"/>
#其中username及password可自定义。
vim /opt/tomcat-9.0.34/conf/Catalina/localhost/manager.xml
#加入如下内容:
<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>
#启动tomcat
bash /opt/tomcat-9.0.34/bin/startup.sh
#浏览器输入地址 http://IP地址:8080/manager/status ,在弹窗中输入刚才设置用户名和密码,看到"http-apr-8080"字样,说明运行模式为apr。
● 方法二
#启动tomcat
bash /opt/tomcat-9.0.34/bin/startup.sh
tail -f /opt/tomcat-9.0.34/logs/catalina.out
#在启动日志中'Server startup in xx ms'前找到Starting ProtocolHandler ["http-apr-8080"]及Starting ProtocolHandler ["ajp-apr-8009"]字样,说明运行模式为apr。