1. 程式人生 > >Tomcat的配置優化

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" /> -->