1:部署包名經過#或者##分隔,能夠實現對不一樣webapp實現統一的請求路徑
#用於鏈接目錄,##用於鏈接版本號
例:app#a 、app#b兩個war包發佈,請求路徑默認爲:/app/a和/app/b
app##1 app##2 :訪問/app時:
(1)request中沒有session信息:使用新版本
(2)request中包含session信息:在每一個app的會話管理器中尋找。若是沒找到,使用新版本linux
2:filter-mapping中能夠不使用url-pattern,直接用servlet-name:只針對該servlet的請求進行處理(至關於使用和該servlet相同的url-pattern)nginx
3:安全性:
3.1:不使用manager時能夠將名稱爲UserDatabase的Resource刪掉
3.2:關閉shutdown端口:設置爲-1
3.3:connector的server屬性:包含在HTTP頭中,默認爲coyote,能夠修改成其餘值
3.4:避免webapp下的全部應用自動啓動:修改host的autoDeploy和deployOnStartup爲false(此時只有host下配置了context的應用會部署,而且變動應用的class時須要手動重啓)
3.5:context的crossContext屬性:是否能夠訪問其餘context的資源,默認爲false
3.6:context的allowLinking屬性:是否容許符號連接,默認爲false。爲true時能夠訪問Web-inf
3.7:定製化ErrorReportValve類,修改showReport(異常棧)和showServerInfo(隱藏服務器信息)爲false。錯誤頁面推薦直接web.xml配置error-pageweb
4:添加https鏈接器及證書
ssl證書生成:
windows: keytool -genkey -alias td -keyalg RSA -keystore d:\key.store
linux:./keytool -genkey -alias td -keyalg RSA -keystore d:\key.store
生成後放入conf文件夾中。
對於https的端口:必需要與http鏈接器的redirectPort一致
redirectPort的做用:
當用戶用http請求某個資源,而該資源自己又被設置了必需要https方式訪問,此時Tomcat會自動重定向到這個redirectPort設置的https端口。算法
放開server.xml中的https鏈接器:
對於8.5之後:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/tdkey.keystore" certificateKeystorePassword="123456"
type="RSA" />
</SSLHostConfig>
</Connector>apache
對於8.5以前:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="d:\key.keystore" keystorePass="123456" clientAuth="false"
sslProtocol="TLS"
/>windows
5:JVM的gc收集器:
HotSpotJVM(sun的官方jvm)包含3種辣雞收集器:
吞吐量:工做時間(排除gc時間)佔比
暫停:gc致使的應用中止響應時間tomcat
(1)串行收集器 SC:SerialCollector
單線程操做,適用於100m如下的應用安全
(2)並行收集器 PC:ParallelCollector
又稱爲吞吐量收集器,並行方式回收,適用於多線程或多核的服務器
優先考慮應用峯值性能,對於暫停時間沒要求服務器
(3)併發收集器CC: ConcurrentCollector
併發執行大部分gc工做,適用於中性、大型應用,響應時間優先於吞吐量。session
6:server.xml配置項優化
(1)connector的maxConnections指定併發的最大連接數,默認爲10000
(2)connector的tcpNoDelay設置爲true,開啓socket的tcpNoDelay選項,從而禁用Nagle算法,默認爲true無需調整。
Nagle算法:小塊數據積攢以後一塊兒發送,下降發送包的數量,提高傳輸效率,可是實時性很低。
(3)connector的maxKeepAliveRequest屬性值:http請求最大長鏈接個數(鏈接被服務器關閉以前能夠接受的最大請求數目),默認100.
設置爲1:禁用http1.0和http1.1的長鏈接
設置爲-1:不由用
(4)connector的socketBuffer屬性,調整socket緩衝區大小有助於提高服務性能
(5)connector的enableLooksUp設置爲false,能夠禁用request.getRemoteHost的DNS域名解析,減小查找時間
(6)http協議下的connector開啓靜態文件壓縮功能,經過compression屬性設置是否開啓,默認關閉(選項有 off,on,force或數字,數字表明壓縮文件的閾值)。,compressionableMimeType設置須要壓縮的文檔類型,compressionMinSize設置開啓壓縮的文件閾值。
與nginx或者ApacheHttpServer集成時能夠不用考慮。
(7)關閉自動部署,提高性能:host元素的autoDeploy屬性設置爲false。
7:conf/web.xml配置jsp相關的優化
(1)jsp的servlet配置,經過配置servlet的初始化參數完成:
development表示是否開發模式,默認爲true,可設置爲false,tomcat將再也不檢測jsp的改動和更新。
在開發環境下能夠將development設置爲true,此時的檢測頻率由modificationTestInterval屬性決定(單位秒,默認爲4)
生產環境中development設置爲false,此時經過checkInterval配置後臺編譯觸發頻率。
trimSpace參數:
用於移除相應中無用的空格
(2)標籤池
org.apache.jasper.runtime.JspFactoryImpl.USE_POOL:布爾值,是否啓用JSP標籤body池,默認啓用
org.apache.jasper.runtime.JspFactoryImpl.POOL_SIZE:整數,JSP標籤body池大小,默認8
org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER:布爾值,輸出jsp標籤時會否進行字符緩衝,默認false
使用方式:在catalina.sh或catalina.bat中啓用參數:CATALINA_OPS = "-Dorg.apache.jasper.runtime.JspFactoryImpl.USE_POOL=true"注意:大多數狀況下開啓以後能夠提高性能,可是若是jsp或者標籤body很大推薦關閉該屬性,不然會佔用過多內存。若是發現內存被大量的BodyContentImpl對象佔用,能夠考慮關閉該屬性