Tomcat的配置優化
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" /> -->