Tomcat性能調優
一、服務器資源
服務器所能提供CPU、內存、硬盤的性能對處理能力有決定性影響。Tomcat性能可以通過提升服務器的性能來進行調優,但一般公司不會選擇這種調優方式,而使用優化配置參數來調優。
二、配置參數調優
1. JVM參數調優,即Tomcat堆虛擬內存
2、禁用DNS查詢,打開壓縮
3、調整線程數
4、改變運行模式
5、禁用AJP連接器
三、JVM參數調優
-Xms<size> 表示JVM初始化堆的大小
-Xmx<size> 表示JVM堆的最大值
-Xss<size> 是指設定每個線程的堆棧大小。
-XX:PermSize<size> JVM初始分配的非堆內存
-XX:MaxPermSize<size> JVM最大允許分配的非堆內存,按需分配
這兩個值的大小一般根據需要進行設置。當應用程序需要的內存超出堆的最大值時虛擬機就會提示內存溢出,並且導致應用服務崩潰。因此一般建議堆的最大值設置為可用內存的最大值的80%。在catalina.bat中,設置JAVA_OPTS=‘-Xms256m -Xmx512m‘,表示初始化內存為256MB,可以使用的最大內存為512MB。
四、禁用DNS查詢,打開壓縮
A、禁用DNS查詢
為了消除DNS查詢對性能的影響我們可以關閉DNS查詢,方式是修改server.xml文件中的enableLookups參數值:
<Connector port="8080" enableLookups="false" redirectPort="8443" />
B、打開壓縮
1)compression=”on” 打開壓縮功能
2)compressionMinSize=”2048″ 啟用壓縮的輸出內容大小,這裏面默認為2KB
3)noCompressionUserAgents=”gozilla, traviata” 對於以下的瀏覽器,不啟用壓縮
4)compressableMimeType=”text/html,text/xml” 壓縮類型
<Connector port=”8080″ protocol=”HTTP/1.1″ compression=”on” compressionMinSize=”2048″
compressableMimeType=”text/html,text/xml,text/javascript,text/css,text/plain” />
五、調整線程數
Tomcat中可以通過修改minSpareThreads和maxSpareThreads的值來控制線程數。
minSpareThreads 最小備用線程數,tomcat啟動時的初始化的線程數
maxSpareThreads 最大備用線程數,一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程
maxThreads tomcat起動的最大線程數,即同時處理的任務個數,默認值為200
acceptCount 當tomcat起動的線程數達到最大時,接受排隊的請求個數,默認值為100
web server允許的最大連接數還受制於操作系統的內核參數設置,通常Windows是2000個左右,Linux是1000個左右。
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
六、改變運行模式
A、tomcat的3種運行模式
(1)BIO
默認的模式,性能非常低下,沒有經過任何優化處理和支持.
(2)NIO
NIO(new I/O),是Java SE 1.4及後續版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基於緩沖區、並能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的縮寫。它擁有比傳統I/O操作(bio)更好的並發運行性能。
(3)APR
安裝起來最困難,但是從操作系統級別來解決異步的IO問題,大幅度的提高性能。
B、優化運行模式選擇
(1)啟動NIO模式
修改server.xml裏的Connector節點,修改protocol為org.apache.coyote.http11.Http11NioProtocol
<Connector port="8080" enableLookups="false" redirectPort="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"/>
(2)啟動APR模式
安裝apr,apr-iconv,apr-uitl,tomcat-native。添加環境變量LD_LIBRARY_PATH。
修改server.xml配置文件中protocol修改成org.apache.coyote.http11.Http11AprProtocol
<Connector port="8080" enableLookups="false" redirectPort="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"/>
七、禁用AJP連接器
AJPv13協議是面向包的。WEB服務器和Servlet容器通過TCP連接來交互;為了節省SOCKET創建的昂貴代價,WEB服務器會嘗試維護一個永久TCP連接到servlet容器,並且在多個請求和響應周期過程會重用連接。
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> -->
Tomcat性能調優