1、下載地址javascript
https://tomcat.apache.org/download-80.cgicss
2、安裝步驟html
將安裝包 apache-tomcat-8.5.39.tar.gz 上傳至服務器 /usr/local 目錄下,再執行以下步驟:java
[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已經安裝好並配置了環境變量):web
[root@admin local]# cd ./tomcat-8.5.39/bin [root@admin bin]# ./startup.sh // 啓動tomcat
啓動成功,以下圖:apache
3、監控json
經過如下網址打開tomcat管理頁面,默認端口爲8080(若是不能打開則關閉服務器防火牆或者開放8080端口)瀏覽器
右側的 Server Status Manager APP 和 Host Manager表明tomcat的管理頁面,想要進入這三個頁面首先須要配置服務器上tomcat安裝目錄下的conf/tomcat-users.xml文件,若是不作配置則會返回403頁面,以下:緩存
在conf/tomcat-users.xml添加以下配置,再重啓tomcattomcat
<role rolename="admin"/> <role rolename="admin-gui"/> <role rolename="admin-script"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="admin" password="admin" roles="admin,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status"/>
Tomcat8若是在上面配置的基礎上,訪問時會報403錯誤,因此須要修改conf/Catalina/localhost/manager.xml 文件(若是沒有的話新建)。 配置內容以下:
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" /> </Context>
再次重啓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
該頁面用於管理主機
4、調優
一、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配置來啓動:
<Connector port="8080"protocol="org.apache.coyote.http11.Http11NioProtocol" 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項目也能跑起來。
二、線程池(執行器)
Connector節點:
官方文檔:https://tomcat.apache.org/tomcat-8.5-doc/config/http.html
默認的tomcat沒有啓用線程池,在tomcat中每個用戶請求都是一個線程,因此可使用線程池提升性能。這裏前臺其實有一個調度線程,而後調度線程會放入線程池內,而後到到必定的時候線程池的任務變成工做線程。
開啓線程池:
maxThreads配置爲500,但顯示爲-1,查詢官方文檔發現:
意思是該屬性配置處理併發請求的最大線程數,若是不配置默認值是200。 若是配置了executor屬性,這個屬性會被忽略。注意斜體部分提到:若是executor設置了值,使用JMX查看的時候這個值會是-1,這是正常的。
詳細參數解釋以下:
將原有的Executor標籤內容替換成以下內容 <Executor name="tomcatThreadPool" --線程池名 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標籤內容替換成以下內容 <Connector executor="tomcatThreadPool" 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
5、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;