天天看點

Tomcat進階特性及性能調優

HTTPS簡介

Https,是以安全為目标的Http通道,在Http的基礎上通過傳輸加密和身份認證保證了傳輸的安全性。HTTPS在HTTP的基礎上加入SSL層,HTTPS的安全基礎是SSL,是以加密的詳細内容就需要SSL。

HTTPS和HTTP的主要差別

HTTPS協定使用時需要到電子商務認證授權機構申請SSL證書

HTTP預設是8080端口,HTTPS預設8443端口

HTTPS是具有SSL加密的安全性傳輸協定,對資料的傳輸加密

HTTP的連接配接是無狀态的,不安全的;HTTPS協定是SSL+HTTP協定建構的可進行加密傳輸、身份認證的網絡協定,比HTTP協定安全

Tomcat對HTTPS的支援

使⽤ JDK 中的 keytool⼯具⽣成免費的秘鑰庫⽂件(證書)

keytool -genkey -alias lagou -keyalg RSA -keystore lagou.keystore

配置conf/server.xml

certificateKeystoreFile 就是上一步生成的檔案的路徑,certificateKeystorePassword是上一步輸入的密鑰

通路https://localhost:8443/測試

我們先來回顧一下Java的雙親委派機制

如一個Hello.class檔案,不考慮自定義加載器,首先會在AppClassLoader中檢查是否已經加載過,如果加載過就不加載了。如果沒有加載過,就會拿到父加載器,那麼父加載器(ExtClassLoader)就會檢查是否加載過,如果沒有,就再往上,讓BootStrapClassLoader檢查是否加載過。

如果還是沒有,因為他的上面已經沒有父加載器了,那麼他就開始自己加載,如果能加載,他就自己加載。不能加載,就下沉到子加載器去加載,一直到最底層,如果沒有類加載器能加載就抛出異常ClassNotFoundException。

而Tomcat為了實作同一個tomcat中,webapps下部署了兩個應用,要使這兩個應用隔離,就算兩個應用裡有相同全路徑的兩個類,也要分别都被加載,且互不能通路。這樣它就違背了雙親委派機制。

Tomcat類加載器圖:

BootstrapClassLoader和ExtClassLoader的作用不變

AppClassLoader正常情況加載的是CLASSPATH下的類,但是Tomcat的啟動腳本并未使用該變量,而是加載tomcat啟動的類,比如bootstrap.jar,通常在catalina.sh中指定,位于CATALINA_HOME/bin下面

Common類加載器加載Tomcat的一些通用的類,位于CATALINA_HOME/lib下,如servlet-api.jar

Catalina ClassLoader用于加載伺服器内部可見類,這些類應用程式不能通路

Shard ClassLoader用于加載應用程式共享類

WebAppClassLoader,每個應用程式都有一個獨一無二的WebApp ClassLoader,用于加載應用程式/WEB-INF/classes和WEB-INF/lib下的類

tomcat8.5預設改變了雙親委派機制

首先從Bootstrap ClassLoader加載指定的類

如果未加載到,從/WEB-INF/classes加載

如果未加載到,從/WEB-INF/lib/*.jar 加載

如果未加載到,則依次從AppClassLoader、Common、Shared加載

Tomcat的優化主要從兩個方面:

JVM虛拟機優化

Tomcat自身的配置優化

對于JVM的虛拟機優化,這裡不做過多贅述,主要關注Tomcat配置的優化

Tomcat配置優化

調整tomcat線程池

調整tomcat連接配接器設定

參數

說明

maxConnections

最⼤連接配接數,當到達該值後,伺服器接收但不會處理更多的請求, 額外的請求将會阻塞.可通過ulimit -a 檢視伺服器限制。對于CPU要求更⾼(計算密集型)時,建議不要配置過⼤ ; 對于CPU要求不是特别⾼時,建議配置在2000左右(受伺服器性能影響)。 當然這個需要伺服器硬體的⽀持

maxThreads

最大線程數

acceptCount

最大排隊等待數,當伺服器接收的請求數量到達maxConnections,此時tomcat會将後面的請求放入隊列中等待,acceptCount指的就是隊列的大小。

禁用AJP連接配接器

調整IO模式

Tomcat8之前的版本預設是BIO,Tomcat8之後的版本預設使用的是NIO模式

動靜分離

可以使用Nginx + Tomcat 相結合的部署方案,Nginx負責靜态資源通路,Tomcat負責Jsp等動态資源通路。(因為Tomcat不擅長處理靜态資源)

書山有路勤為徑,學海無涯苦作舟