Tomcat優化
部署安裝tomcat8
下載並安裝
修改Tomcat的管理用戶配置
進入Tomcat的conf目錄下
cd apache-tomcat-8.5.34/conf/
修改配置文件
vim tomcat-users.xml
修改文件的內容如下
<role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="admin"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
#如果是tomcat7,配置了tomcat用戶就可以登錄系統了,但是tomcat8中不行,還需要修改 另一個配置文件,否則訪問不了,提示403
修改xml文件
vim webapps/manager/META-INF/context.xml
將value的內容注釋掉
<Context antiResourceLocking="false" privileged="true" >:
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
<Manager sessionAttributeValueClassNameFilter="java\.lang\. (?:Boolean|Integer|Long|Number|String)、
|org\.apache\.catalina\.filters\.Cs rfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
啟動Tomcat
進入Tomcat中的bin目錄下
cd /cat/apache-tomcat-8.5.34/bin/
啟動
./startup.sh
打開瀏覽器進行測試訪問
http://192.168.168.40:8080/
點擊Server Status,輸入用戶名tomcat,輸入密碼tomcat

成功之后即可看見如下頁面

Tomcat配置優化
禁用AJP連接
在服務狀態頁面中可以看到,默認狀態下會啟用AJP服務,並且占用8009端口

什么是AJP呢
AJP(Apache JServer Protocol)
AJPv13協議是面向包的,WEB服務器和Servlet容器通過TCP連接來交互;為了節省SOCKET創建的昂貴代價,WEB服務器會嘗試維護一個永久TCP連接到servlet容器,並且在多個請求和響應周期過程會重用連接。

我們一般是使用nginx+tomcat的架構,所以用不着AJP協議,所以把AJP連接器禁用;
修改conf下的server.xml文件,將AJP服務器禁用掉即可;
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
重啟tomcat,查看效果

可以看到AJP服務以及不存在了
執行器(線程池)
在tomcat中每一個用戶請求都是一個線程,所以可以使用線程池提高性能;
修改server.xml文件
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100"/>
參數說明
maxThreads:最大並發數,默認設置 150,一般建議在 500 ~ 1000,根據硬件設施和業務來判斷
minSpareThreads:tomcat初始化時創建的線程數,默認是4
prestartminSpareThreads:在tomcat初始化的時候就初始化minSpareThreads的參數值,如果不等於true,minSpareThreads的值就沒啥效果了
maxQueueSize:最大的等待隊列數,超過則拒絕請求
在Connector中設置executor屬性指向上面的執行器
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
保存退出,重啟tomcat,查看效果
三種運行模式
tomcat的運行模式有3種
bio:默認的模式,性能非常低,沒有經過任何優化處理和支持;
nio:是java SE1.4及后續版本提供的一種新的I/O操作方式。java nio是一個基於緩沖區,並能提供非阻塞I/O操作的java API,因此nio也被看成是non-blocking I/O的縮寫。它擁有比傳統I/O操作(bio)更好的並發運行性能;
apr:安裝起來最困難,但是從操作系統級別來解決異步的IO問題,大幅度的提高性能;
推薦使用nio,不過,在tomcat8中有最新的nio2,速度更快,建議使用nio2;
設置nio2:
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" />
可以看到已設置nio2

