詳細配置:java
<Connector executor="tomcatThreadPool"
port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />web
一、 Tomcat的外部調優
JAVA虛擬機(JVM)性能優化,能夠經過如下兩個參數來設置虛擬機使用內存的大小,-Xms<size>(JVM初始化堆的大小)和-Xmx<size>(JVM堆的最大值)。
這兩個值的大小通常根據須要進行設置。初始化堆的大小執行了虛擬機在啓動時向系統申請的內存的大小。通常而言,這個參數不重要。可是有的應用程序在大負載的狀況下會急劇地佔用更多的內存,此時這個參數就是顯得很是重要,若是虛擬機啓動時設置使用的內存比較小而在這種狀況下有許多對象進行初始化,虛擬機就必須重複地增長內存來知足使用。因爲這種緣由,咱們通常把-Xms和-Xmx設爲同樣大,而堆的最大值受限於系統使用的物理內存。通常使用數據量較大的應用程序會使用持久對象,內存使用有可能迅速地增加。當應用程序須要的內存超出堆的最大值時虛擬機就會提示內存溢出,而且致使應用服務崩潰。所以通常建議堆的最大值設置爲可用內存的最大值的80%。
Tomcat默承認以使用的內存爲128MB,在較大型的應用項目中,這點內存是不夠的,須要調大。
Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增長以下設置:
JAVA_OPTS='-Xms【初始化內存大小】-Xmx【可使用的最大內存】'
須要把這個兩個參數值調大。例如:AVA_OPTS='-Xms256m-Xmx512m',表示初始化內存爲256MB,可使用的最大內存爲512MB。
另外須要考慮的是Java提供的垃圾回收機制。虛擬機的堆大小決定了虛擬機花費在收集垃圾上的時間和頻度。收集垃圾能夠接受的速度與應用有關,應該經過分析實際的垃圾收集的時間和頻率來調整。若是堆的大小很大,那麼徹底垃圾收集就會很慢,可是頻度會下降。若是你把堆的大小和內存的須要一致,徹底收集就很快,可是會更加頻繁。調整堆大小的的目的是最小化垃圾收集的時間,以在特定的時間內最大化處理客戶的請求。在基準測試的時候,爲保證最好的性能,要把堆的大小設大,保證垃圾收集不在整個基準測試的過程當中出現, 若是系統花費不少的時間收集垃圾,請減少堆大小。一次徹底的垃圾收集應該不超過3-5秒。若是垃圾收集成爲瓶頸,那麼須要指定代的大小,檢查垃圾收集的詳細輸出,研究垃圾收集參數對性能的影響。通常說來,你應該使用物理內存的80%做爲堆大小。當增長處理器時,記得增長內存,由於分配能夠並行進行,而垃圾收集不是並行的。
二、 Tomcat的內部調優
(一)禁止DNS查找
有時候咱們的應用可能要記錄客戶端的信息,兩種方式,一是記錄客戶端的數字IP地址,另外一個是在DNS數據中查找真實的主機名。DNS查找會增長網絡通訊,以至形成了網絡延遲。要消除這個延遲,咱們能夠禁掉DNS查找。這時咱們的應用再調用getRemoteHost( )方法時,它就只會獲得數字IP地址。這個配置是在Tomcat的serve.xml文件中,Connector對象的enableLookups屬性,以下:
<!--
Define a non-SSLCoyote HTTP/1.1 Connector on port 8080
-->
<Connector
className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080"minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="10" debug="0" connectionTimeout="20000"
useURIValidationHack="false"
/>
在生產系統中,除非應用要獲得全部客戶端真實的主機名,這個一般是建議禁掉的。實在不行這樣的工做咱們能夠在Tomcat的外面作。在一個流量較小的Servr這種修改的效果可能不是十分明顯,可是對於某些站點來講,也許忽然之間流量暴增也說不定呢,好比,前段時間的奧運票務網站,哈哈!
(二)調整線程數
另外一個影響性能的是Connector所使用的進程數。Tomcat使用一個線程池來提升請求響應的速度。Java中的一個線程單獨同操做系統交互,而且有它本身的本地內存,以及同進程內的其餘線程分享部分共享內存。
咱們能夠經過修改Connector對象的minProcessors和maxProcessors來控制線程數。這個數字也許在剛上線的時候進行了適當的設置,但是當用戶數變多的時候咱們就要增長配置數了。minProcessors值應該設置的足夠大來處理最小負載。當用戶變多的時候,Tomcat會分配更多的線程,不超過maxProcessors。上限也必定要設置的適當,以避免使server的內存超過JVM的內存限制而掛掉。
(三)加速JSP的編譯
第一次訪問JSP的時候,它會被轉換成Java servlet源碼,而後編譯成二進制代碼。這個過程當中,咱們是能夠控制所使用的編譯器的。默認狀況,Tomcat所使用的是和命令行上執行javac時一樣的編譯器。其實有更快的編譯器的,咱們能夠利用這些來提升JSP的編譯速度。
5、Tomcat服務器的監控
一、Tomcat自帶的監控指標servelet
第一步:在配置文件中增長用戶訪問的權限。修改conf/tomcat-users.xml文件,在其中加入一行 <user username="用戶名" password="密碼" roles="manager"/>
第二步:在IE瀏覽器中輸入http://IP地址:端口號/manager/status
第三步:在彈出的對話框中輸入第一步設置的用戶名和密碼,便可查看到應用服務器的相關性能指標數據。
二、使用專門的工具進行監控,網上不少在此就再也不贅述。數據庫
在tomcat配置文件server.xml中的配置中,和鏈接數相關的參數有:
minProcessors:最小空閒鏈接線程數,用於提升系統處理性能,默認值爲10
maxProcessors:最大鏈接線程數,即:併發處理的最大請求數,默認值爲75
acceptCount:容許的最大鏈接數,即等待隊列,指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理。應大於等於maxProcessors,默認值爲100,
enableLookups:是否反查域名,取值爲:true或false。爲了提升處理能力,應設置爲false
connectionTimeout:網絡鏈接超時,單位:毫秒。設置爲0表示永不超時,這樣設置有隱患的。一般可設置爲30000毫秒。
和最大鏈接數相關的參數爲maxProcessors和acceptCount。若是要加大併發鏈接數應同時加大這兩個參數。
web server容許的最大鏈接數還受制於操做系統的內核參數設置,一般Windows是2000個左右,Linux是1000個左右。
三、server.xml配置簡介
下面講述這個文件中的基本配置信息,更具體的配置信息請參考tomcat的文檔:
server:
一、port指定一個端口,這個端口負責監聽關閉tomcat的請求
二、shutdown指定向端口發送的命令字符串
service:
一、name指定service的名字
Connector(表示客戶端和service之間的鏈接):
一、port指定服務器端要建立的端口號,並在這個斷口監聽來自客戶端的請求
二、minProcessors服務器啓動時建立的處理請求的線程數
三、maxProcessors最大能夠建立的處理請求的線程數
四、enableLookups若是爲true,則能夠經過調用request.getRemoteHost()進行DNS查詢來獲得遠程客戶端的實際主機名,若爲false則不進行DNS查詢,而是返回其ip地址
五、redirectPort指定服務器正在處理http請求時收到了一個SSL傳輸請求後重定向的端口號
六、acceptCount指定當全部可使用的處理請求的線程數都被使用時,能夠放處處理隊列中的請求數,超過這個數的請求將不予處理
七、connectionTimeout指定超時的時間數(以毫秒爲單位)
線程數能夠大體上用「同時在線人數*每秒用戶操做次數(每秒的鏈接數)*系統平均操做時間(服務器的處理時間)」來計算。
Engine(表示指定service中的請求處理機,接收和處理來自Connector的請求):
一、defaultHost指定缺省的處理請求的主機名,它至少與其中的一個host元素name屬性值是同樣的。
Context(表示一個web應用程序):
一、docBase應用程序的路徑或者是WAR文件存放的路徑
二、path表示此web應用程序的url的前綴,這樣請求的url爲
http://localhost:8080/path/****
三、reloadable這個屬性很是重要,若是爲true,則tomcat會自動檢測應用程序的/WEB-INF/lib和/WEB-INF/classes目錄的變化,自動裝載新的應用程序,咱們能夠在不重起tomcat的狀況下改變應用程序
host(表示一個虛擬主機):
一、name指定主機名
二、appBase應用程序基本目錄,即存放應用程序的目錄
三、unpackWARs若是爲true,則tomcat會自動將WAR文件解壓,不然不解壓,直接從WAR文件中運行應用程序
Logger(表示日誌,調試和錯誤信息):
一、className指定logger使用的類名,此類必須實現org.apache.catalina.Logger接口
二、prefix指定log文件的前綴
三、suffix指定log文件的後綴
四、timestamp若是爲true,則log文件名中要加入時間,例:localhost_log.2001-10-04.txt
Realm(表示存放用戶名,密碼及role的數據庫):
一、className指定Realm使用的類名,此類必須實現org.apache.catalina.Realm接口
Valve(功能與Logger差很少,其prefix和suffix屬性解釋和Logger中的同樣):
一、className指定Valve使用的類名,如用org.apache.catalina.valves.AccessLogValve
類能夠記錄應用程序的訪問信息
directory(指定log文件存放的位置):
一、pattern有兩個值,common apache
轉自:https://blog.csdn.net/jinwanmeng/article/details/7756591瀏覽器