Tomcat性能優化

Tomcat優化,可以分爲內存,線程,IO:

一:Tomcat內存優化,啓動時告訴JVM我要一塊大內存(調優內存是最直接的方式)

Windows 下的catalina.bat

Linux 下的catalina.sh 如:

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優化到這個層次,可以應對大部分性能需求.

總結:tomcat優化的方式有三種

1給足夠的內存給Tomcat來運行這是最直接的

2線程的連接處理數量進行控制

3設置io的處理方式是同步或異步

System.out語句會嚴重影響代碼執行的效率,就將這些爲必要的語句在調試完成之後全部刪除以提高效率.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章