Tomcat的配置优化
Tomcat 6/7/8 的优化参数有点不一样,最好按下面的方式看一下官网这个文档是否还保留着这个参数。
启动tomcat,访问该地址,查看文档:
文档:http://127.0.0.1:8080/docs/config
Tomcat 6 文档:https://tomcat.apache.org/tomcat-6.0-doc/config
Tomcat 7 文档:https://tomcat.apache.org/tomcat-7.0-doc/config/
Tomcat 8 文档:https://tomcat.apache.org/tomcat-8.0-doc/config/
下面是一些通用的优化手段。
1.开启连接池
- 修改前
#被注释了
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
- 修改后
#打开注释。
<Executor executor="tomcatThreadPool"
namePrefix="catalina-exec-"
#将并将线程数调大。
maxThreads="150"
minSpareThreads="25"/>
参数解释:
maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 800,根据硬件设施和业务来判断
minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25
prestartminSpareThreads:在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就没啥效果了
maxQueueSize:最大的等待队列数,超过则拒绝请求
2.修改默认的连接参数
- 修改前
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
#默认没有开启线程池
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
- 修改后
<Connector
#使用线程池
executor="tomcatThreadPool"
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
maxConnections="10000"
redirectPort="8443"
enableLookups="false"
acceptCount="100"
maxPostSize="10485760"
#开启压缩
compression="on"
disableUploadTimeout="true"
compressionMinSize="2048"
acceptorThreadCount="2"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
#设置编码
URIEncoding="utf-8"
/>
3.开启NIO或APR
Tomcat有三种运营模式:bio、nio、apr,不同模式下Tomcat的运行效率差别比较大。
- BIO:阻塞式IO,Tomcat6及以前版本默认运行模式,性能非常低下,没有经过任何优化处理。
NIO:非阻塞式IO,Tomcat7以后的版本默认运行模式,利用Java异步IO技术使Tomcat运行性能有所提升。
APR:从操作系统级别来解决异步的IO问题,大幅度的提高性能。
Tomcat6设置NIO模式
直接修改server.xml里的Connector节点,修改protocol为 org.apache.coyote.http11.Http11NioProtocol,启动生效。
<Connector port="8080"
#开启NIO模式
protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
Tomcat7/8设置APR模式
#1.必须要安装apr和native,直接启动就支持apr。
yum install apr-devel openssl-devel
#2.安装native。进入Tomcat的bin目录,解压native源码包
tar -zxvf tomcat-native.tar.gz
cd tomcat-native-1.1.32-src/jni/native
./configure--with-apr=/usr/bin/apr-1-config--with-java-home="/opt/soft/jdk1.8.0_60" --with-ssl=yes
make
make install
native 会被安装到/usr/local/apr/lib。我们需要把/usr/local/apr/lib/ libtcnative-1.so.0.1.32指向Tomcat可识别路径。
15-Apr-2016 22:18:54.209 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent
The APR based Apache Tomcat Native library which allows optimal performance in production environments
was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Tomcat8默认apr是开启的,配置在server.xml
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
是由于操作系统未安装apr或者apr路径未指到Tomcat默认可识别的路径,则apr模式无法启动,自动切换启动nio模式。
cd /usr
mkdir java
cd java/
mkdir packages
cd packages/
mkdir lib
cd lib/
mkdir amd64
cd amd64/
把/usr/local/apr/lib/ libtcnative-1.so.0.1.32软链接到上面创建的目录。
ln -s /usr/local/apr/lib/libtcnative-1.so.0.1.32 libtcnative-1.so
ln -s /usr/local/apr/lib/libtcnative-1.so.0.1.32 libtcnative-1.so.0
重新启动Tomcat看到启动日志最后三行
4.禁用AJP
如果服务器没有使用 Apache则可以关闭该项。通常我们用的都是nginx,所以可以禁用AJP。
#把下面这一行注释掉,默认 Tomcat 是开启的。
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->