淺談Tomcat伺服器優化方法

動力節點發表於2019-01-03

對於JavaWeb開發人員而言,Tomcat已成為預設的web伺服器,但是在生產環境下使用Tomcat部署應用,我們如果採用Tomcat預設的配置,尤其是記憶體和執行緒的配置,其配置都很低,容易成為效能瓶頸,所以我們需要對Tomcat伺服器進行優化,提升其執行效能,下面我們一起來看看Tomcat如何優化?

 

一、Tomcat記憶體優化,啟動時告訴JVM需要多大記憶體(調優記憶體是最直接的方式)

Windows 下的 catalina.bat

Linux 下的 catalina.sh

在該檔案中配置jvm的記憶體空間,如: JAVA_OPTS=`-Xms256m -Xmx512m`

-Xms<size> JVM初始化堆的大小

-Xmx<size> JVM堆的最大值,實際引數大小根據伺服器配置或者專案具體設定;

 

二、Tomcat 執行緒優化 在server.xml中配置

比如:

<Connector port=”80″ protocol=”HTTP/1.1″ maxThreads=”600″ minSpareThreads=”100″ maxSpareThreads=”500″ acceptCount=”700″

connectionTimeout=”20000″  />



maxThreads=”X” 表示最多同時處理X個連線

minSpareThreads=”X” 初始化X個連線

maxSpareThreads=”X” 表示如果最多可以有X個執行緒,一旦超過X個,則會關閉不在需要的執行緒

acceptCount=”X” 當同時連線的人數達到maxThreads時,還可以排隊,佇列大小為X.超過X就不處理

 

三、Tomcat IO 優化

1:同步阻塞IO(JAVA BIO) 同步並阻塞,伺服器實現模式為一個連線一個執行緒(one connection one thread 想想都覺得恐怖,執行緒可是非常寶貴的資源),當然可以通過執行緒池機制改善.

2:JAVA NIO 又分為同步非阻塞IO,非同步阻塞IO與BIO最大的區別one request one thread.可以複用同一個執行緒處理多個connection(多路複用).

3:非同步非阻塞IO(Java NIO2又叫AIO) 主要與NIO的區別主要是作業系統的底層區別,可以做個比喻:比作快遞,NIO就是網購後要自己到官網查下快遞是否已經到了(可能是多次),然後自己去取快遞;AIO就是快遞員送貨上門了(不用關注快遞進度)。

BIO方式適用於連線數目比較小且固定的架構,這種方式對伺服器資源要求比較高,併發侷限於應用中,JDK1.4以前的唯一選擇,但程式直觀簡單易理解.

NIO方式適用於連線數目多且連線比較短(輕操作)的架構,比如聊天伺服器,併發侷限於應用中,程式設計比較複雜,JDK1.4開始支援.

AIO方式使用於連線數目多且連線比較長(重操作)的架構,比如相簿伺服器,充分呼叫OS參與併發操作,程式設計比較複雜,JDK7開始支援.

在server.xml中

<Connector port=”80″ protocol=”org.apache.coyote.http11.Http11NioProtocol” 

    connectionTimeout=”20000″ 

    URIEncoding=”UTF-8″ 

    useBodyEncodingForURI=”true” 

    enableLookups=”false” 

    redirectPort=”8443″ />

實現對Tomcat的IO切換。

 

四、大殺器APR

APR是從作業系統級別來解決非同步的IO問題,大幅度的提高效能. (http://apr.apache.org/)。

APR(Apache Portable Runtime)是一個高可移植庫,它是Apache HTTP Server 2.x 的核心,能更好地和其它本地web技術整合,總體上讓Java更有效率作為一個高效能web伺服器平臺而不是簡單作為後臺容器;

在產品環境中,特別是直接使用Tomcat做WEB伺服器的時候,應該使用Tomcat Native來提高其效能,如果不配APR,基本上300個執行緒狠快就會用滿,以後的請求就只好等待.但是配上APR之後,併發的執行緒數量明顯下降,從原來的300可能會馬上下降到只有幾十,新的請求會毫無阻塞的進來;

在區域網環境測,就算是400個併發,也是一瞬間就處理/傳輸完畢,但是在真實的Internet環境下,頁面處理時間只佔0.1%都不到,絕大部分時間都用來頁面傳輸,如果不用APR,一個執行緒同一時間只能處理一個使用者,勢必會造成阻塞,所以生產環境下用apr是非常必要的.

安裝Apache Tomcat Native Library,直接啟動就支援apr(http://tomcat.apache.org/native-doc/)它本身是基於APR的,排除程式碼問題Tomcat優化到這個層次,可以應對大部分效能需求;

最後,優化的前提條件是良好的程式碼質量和設計。


相關文章