项目使用中Tomcat性能一直是瓶颈,从以下两点进行优化:线程池,运行模式。
1.并发配置
<Executor name=“tomcatThreadPool” # 配置TOMCAT共享线程池,NAME为名称
namePrefix=“HTTP-8088-exec-” # 线程的名字前缀,用于标记线程名称
prestartminSpareThreads=“true” # executor启动时,是否开启最小的线程数
maxThreads=“5000” # 允许的最大线程池里的线程数量,默认是200,大的并发应该设置的高一些,这里设置可以支持到5000并发
maxQueueSize=“100” # 任务队列上限
minSpareThreads=“50” # 最小的保持活跃的线程数量,默认是25.这个要根据负载情况自行调整了。太小了就影响反应速度,太大了白白占用资源
maxIdleTime=“10000” # 超过最小活跃线程数量的线程,如果空闲时间超过这个设置后,会被关别。默认是1分钟。
/>
<Connector port=“8088” protocol=“org.apache.coyote.http11.Http11NioProtocol”
connectionTimeout=“5000” redirectPort=“443” proxyPort=“443” executor=“tomcatThreadPool” # 采用上面的共享线程池
URIEncoding=“UTF-8”/>
际情况设置
maxThreads=“600” ///最大线程数
minSpareThreads=“100”///初始化时创建的线程数
maxSpareThreads=“500”///一旦创建的线程超过这个值,Tomcat就会关闭不再需要
的socket线程。
acceptCount=“700”//指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
2.运行模式配置
1)、BIO(阻塞式):Tomcat 的默认模式,该模式性能较低,没有经过任何优化处理和支持,一个线程处理一个请求。缺点:并发量过大时,线程数较多,浪费资源。Tomcat7 及以下版本,在 linux 系统中默认使用该模式。
2)、NIO-Non-blocking IO(非阻塞IO):Java NIO 可以让你非阻塞的使用 IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。Tomcat8 在Linux系统中默认使用这种方式。
3)、APR:Apache Portable Runtime,从操作系统层面解决io阻塞问题。Tomcat7 或 Tomcat8 在 Win7 或以上的系统中启动默认使用这种方式。Linux 如果安装了 apr 和 native,Tomcat 直接启动就支持 apr
默认bio,可配置成以下nio
主要介绍apr配置,项目使用Linux环境,win不考虑,实际很少用
备注:需要两个包,官网下载,或本文链接获取 https://download.csdn.net/download/leelongjava/11456640
apr-1.7.0.tar.gz
apr-util-1.6.1.tar.gz
安装过程…
a)解压文件
cd /usr/local/
tar -zxvf apr-1.7.0.tar.gz
tar -zxvf apr-util-1.6.1.tar.gz
b)安装apr和apr-util
cd apr-1.7.0
./configure --prefix=/usr/local/apr
make
make install
cd …
cd apr-util-1.6.1
./configure --with-apr=/usr/local/apr //配置指向apr-1.7.0的安装目录
// 编译过程中遇到 expat.h: No such file or directory 问题,安装 expat-devel
// rpm -ivh expat-devel-2.1.0-10.el7_3.x86_64.rpm
make
make install
c)安装 tomcat-native,Tomcat自带资源包
cd /usr/local/tomcat/bin
tar -zxvf tomcat-native.tar.gz
cd tomcat-native-1.1.29-src/jni/native
./configure --with-apr=/usr/local/apr --with-java -home=/usr/java/jdk1.7.0_25 // jdk包名根据情况更换
make
make install
d)设置 apr 的环境变量
vi /etc/profile
#最后面添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
#profile生效
source /etc/profile
也可以修改 tomcat 的启动 shell ( catalina.sh ),在该文件中加入启动参数: CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
e)启动验证tomcat,查看日志 org.apache.coyote.http11.Http11AprProtocol init,表示成功
#备注问题
1.出现 ssl 报错问题
server.xml 添加以下设置<
Listener className=“org.apache.catalina.core.AprLifecycleListener” SSLEngine=“off” />