一、下載地址
https://tomcat.apache.org/download-80.cgi
二、安裝步驟
將安裝包 apache-tomcat-8.5.39.tar.gz 上傳至伺服器 /usr/local 目錄下,再執行如下步驟:
[root@admin local]# cd /usr/local
[root@admin local]# tar -zxvf apache-tomcat-8.5.39.tar.gz // 解壓壓縮包
[root@admin local]# mv apache-tomcat-8.5.39 tomcat-8.5.39 // 重命名tomcat目錄
啟動tomcat(JDK已經安裝好並配置了環境變量):
[root@admin local]# cd ./tomcat-8.5.39/bin
[root@admin bin]# ./startup.sh // 啟動tomcat
啟動成功,如下圖:
三、監控
通過以下網址打開tomcat管理頁面,默認埠為8080(如果不能打開則關閉伺服器防火牆或者開放8080埠)
右側的 Server Status Manager APP 和 Host Manager代表tomcat的管理頁面,想要進入這三個頁面首先需要配置伺服器上tomcat安裝目錄下的conf/tomcat-users.xml文件,如果不做配置則會返回403頁面,如下:
在conf/tomcat-users.xml添加如下配置,再重啟tomcat
Tomcat8如果在上面配置的基礎上,訪問時會報403錯誤,所以需要修改conf/Catalina/localhost/manager.xml 文件(如果沒有的話新建)。配置內容如下:
docBase="${catalina.home}/webapps/manager">
再次重啟tomcat後,就能進入Server Status Manager APP 和 Host Manager這三個頁面了。
Server Status
Status-JVM
Free memory:剩餘內存;
Total menory:總內存;
Max menory:最大內存;
Status-HTTP
Max threads:最大線程數;
Current thread count:當前線程數;
Current thread busy:當前忙碌線程數;
Max processing time:最大處理時間;
ms Processing time:最短處理時間;
Request count:請求數;
Error count:錯誤數;
Bytes received:接受字節;
Bytes sent:發送字節;
Manager APP
該頁面用來管理Web項目,部署在Tomcat下的項目可以通過該頁面來管理,如下:
Host Manager
該頁面用於管理主機
四、調優
1、Tomcat的運行模式有三種:
BIO
性能比較低下,沒有經過任何優化處理和支持。一個線程處理一個請求。缺點:並發量高時,線程數較多,浪費資源。Tomcat7或以下,在Linux系統中默認使用這種方式。
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)更好的並發運行性能。
利用Java的異步IO處理,可以通過少量的線程處理大量的請求。
Tomcat8在Linux系統中默認使用這種方式。
Tomcat7必須修改Connector配置來啟動:
connectionTimeout="20000"redirectPort="8443"/>
APR
安裝起來最困難,但是從作業系統級別來解決異步的IO問題,能夠大幅度的提高性能。即Apache PortableRuntime,從作業系統層面解決IO阻塞問題。
Tomcat7或Tomcat8在Win7或以上的系統中啟動默認使用這種方式。
Linux如果安裝了apr和native,Tomcat直接啟動就支持apr。
具體安裝辦法 參見這個地址:https://my.oschina.net/lsw90/blog/181161
Tomcat啟動的時候,可以通過log看到Connector使用的是哪一種運行模式:
StartingProtocolHandler["http-bio-8080"]
StartingProtocolHandler ["http-nio-8080"]
StartingProtocolHandler ["http-apr-8080"]
Tomcat7及以下版本啟動啟動NIO模式:
修改server.xml里的Connector節點,修改protocol為:org.apache.coyote.http11.Http11NioProtocol,如下:
修改前:
修改後:
為什麼它不直接改成NIO的形式呢?
這個方式是利用了jdk 1.4及後續版本提供的一種新的I/O操作方式(即java.nio包及其子包)為橋樑實現的,不改成這種優化方式就是為了兼容1.4之前的JAVA項目也能跑起來。
2、線程池(執行器)
Connector節點:
官方文檔:https://tomcat.apache.org/tomcat-8.5-doc/config/http.html
默認的tomcat沒有啟用線程池,在tomcat中每一個用戶請求都是一個線程,所以可以使用線程池提高性能。這裡前台其實有一個調度線程,然後調度線程會放入線程池內,然後到到一定的時候線程池的任務變成工作線程。
開啟線程池:
maxThreads配置為500,但顯示為-1,查詢官方文檔發現:
意思是該屬性配置處理並發請求的最大線程數,如果不配置默認值是200。如果配置了executor屬性,這個屬性會被忽略。注意斜體部分提到:如果executor設置了值,使用JMX查看的時候這個值會是-1,這是正常的。
詳細參數解釋如下:
將原有的Executor標籤內容替換成如下內容
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="30"
maxIdleTime="60000"
prestartminSpareThreads="true"
maxQueueSize="100"/>
maxThreads:最大並發數,默認設置 200,一般建議在 500 ~ 800,根據硬體設施和業務來判斷
minSpareThreads:Tomcat 初始化時創建的線程數,默認設置 25
maxIdleTime:如果當前線程大於初始化線程,那空閒線程存活的時間,單位毫秒,默認60000=60秒=1分鐘。
prestartminSpareThreads:在 Tomcat 初始化的時候就初始化 minSpareThreads 的參數值,如果不等於 true,minSpareThreads 的值就沒啥效果了
maxQueueSize:最大的等待隊列數,超過則拒絕請求
將原有的Connector標籤內容替換成如下內容
port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="60000"
maxConnections="10000"
redirectPort="8443"
enableLookups="false"
acceptCount="100"
maxPostSize="10485760"
maxHttpHeaderSize="8192"
compression="on"
disableUploadTimeout="true"
compressionMinSize="2048"
acceptorThreadCount="2"
compressableMimeType="text/html,text/plain,text/css,application/javascript,application/json,application/x-font-ttf,application/x-font-otf,image/svg+xml,image/jpeg,image/png,image/gif,audio/mpeg,video/mp4"
URIEncoding="utf-8"
processorCache="20000"
tcpNoDelay="true"
connectionLinger="5"
server="Server Version 11.0"/>
替換後訪問速度肯定會比以前快
protocol:Tomcat 8 設置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol
protocol:Tomcat 6 設置 nio 更好:org.apache.coyote.http11.Http11NioProtocol
protocol:Tomcat 8 設置 APR 性能飛快:org.apache.coyote.http11.Http11AprProtocol
connectionTimeout:Connector接受一個連接後等待的時間(milliseconds),默認值是60000。
maxConnections:這個值表示最多可以有多少個socket連接到tomcat上
enableLookups:禁用DNS查詢
acceptCount:當tomcat起動的線程數達到最大時,接受排隊的請求個數,默認值為100。
maxPostSize:設置由容器解析的URL參數的最大長度,-1(小於0)為禁用這個屬性,默認為2097152(2M) 請注意, FailedRequestFilter 過濾器可以用來拒絕達到了極限值的請求。
maxHttpHeaderSize:http請求頭信息的最大程度,超過此長度的部分不予處理。一般8K。
compression:是否啟用GZIP壓縮 on為啟用(文本數據壓縮) off為不啟用, force 壓縮所有數據
disableUploadTimeout:這個標誌允許servlet容器使用一個不同的,通常長在數據上傳連接超時。 如果不指定,這個屬性被設置為true,表示禁用該時間超時。
compressionMinSize:當超過最小數據大小才進行壓縮
acceptorThreadCount:用於接受連接的線程數量。增加這個值在多CPU的機器上,儘管你永遠不會真正需要超過2。 也有很多非維持連接,您可能希望增加這個值。默認值是1。
compressableMimeType:配置想壓縮的數據類型
URIEncoding:網站一般採用UTF-8作為默認編碼。
processorCache:協議處理器緩存的處理器對象來提高性能。 該設置決定多少這些對象的緩存。-1意味著無限的,默認是200。 如果不使用Servlet 3.0異步處理,默認是使用一樣的maxThreads設置。 如果使用Servlet 3.0異步處理,默認是使用大maxThreads和預期的並發請求的最大數量(同步和異步)。
tcpNoDelay:如果設置為true,TCP_NO_DELAY選項將被設置在伺服器套接字,而在大多數情況下提高性能。這是默認設置為true。
connectionLinger:秒數在這個連接器將持續使用的套接字時關閉。默認值是 -1,禁用socket 延遲時間。
server:隱藏Tomcat版本信息,首先隱藏HTTP頭中的版本信息
Executor節點:
官方文檔:https://tomcat.apache.org/tomcat-8.5-doc/config/executor.html
五、AJP協議
Tomcat最主要的功能是提供Servlet/JSP容器,儘管它也可以作為獨立的Java Web伺服器,但它對靜態資源(如HTML文件或圖像文件)的處理速度,以及提供的Web伺服器管理功能方面都不如其他專業的HTTP伺服器,如IIS和Apache伺服器。因此在實際應用中,常常把Tomcat與其他HTTP伺服器集成。對於不支持Servlet/JSP的HTTP伺服器,可以通過Tomcat伺服器來運行Servlet/JSP組件。
Tomcat伺服器通過Connector連接器組件與客戶程序建立連接,Connector組件負責接收客戶的請求,以及把Tomcat伺服器的響應結果發送給客戶。默認情況下,Tomcat在server.xml中配置了兩種連接器:
第一個連接器監聽8080埠,負責建立HTTP連接。在通過瀏覽器訪問Tomcat伺服器的Web應用時,使用的就是這個連接器。
第二個連接器監聽8009埠,負責和其他的HTTP伺服器建立連接。在把Tomcat與其他HTTP伺服器集成時,就需要用到這個連接器。
在實際應用中,如果網站的訪問量非常大,為了提高訪問速度,可以將多個Tomcat伺服器與Apache集成,讓它們共同分擔運行Servlet/JSP組件的任務。JK插件的loadbalancer(負載平衡器)負責根據在workers.properties文件中預先配置的lbfactor(負載平衡因數)為這些Tomcat伺服器分配工作負荷,實現負載平衡。那麼,Apache和Tomcat結合的時候,會有如下現象:
Apache會攔截所有請求,將servlet和JSP(.jsp結尾)請求通過AJP交給Tomcat處理,然後再把結果拿到Apache然後返回;
Apache將靜態資源的訪問,(類似html/css/jpg等類型的文件)自己直接處理不交給Tomcat,直接返回;
Apache和Tomcat結合之後,Tomcat的HTTP Connector永遠不會被用到了,而是用AJP Connector;
原文連結:https://www.tuicool.com/articles/reU7N3m