Tomcat在各位JavaWeb從業者常常就是預設的開發環境,但是Tomcat的預設配置作為生產環境,尤其是記憶體和執行緒的配置,預設都很低,容易成為效能瓶頸. 幸好Tomcat還有很多的提升空間.下文介紹一下Tomcat優化,可以分為內存,線程,IO.
Tomcat在各位JavaWeb從業者常常就是預設的開發環境,但是Tomcat的預設配置作為生產環境,尤其是記憶體和執行緒的配置,預設都很低,容易成為效能瓶頸.
幸好Tomcat還有很多的提升空間.下文介紹一下Tomcat優化,可以分為內存,線程,IO.
Windows 下的catalina.bat
#Linux 下的catalina.sh 如:
JAVA_OPTS='-Xms256m -Xmx512m'
-Xms
-Xmx
maxThreads="X" 表示最多同時處理X個連線
minSpareThreads="X" 初始化X個連線
maxSpareThreads="X" 表示如果最多可以有X個線程,一旦超過X個,則會關閉不在需要的線程
acceptCount="X" 當同時連接的人數達到maxThreads時,還可以排隊,隊列大小為X.超過X就不處理
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中
實作對Tomcat的IO切換.
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優化到這個層次,可以應付大部分效能需求.
最后一句话"再牛B的服务器,也顶不住一个傻B的代码".优化的前提条件是良好的代码质量和设计.
以上是解析Tomcat性能優化N種方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!