在tomcat啟動的時候,我們可以做一些優化設置來使得tomcat的啟動更快速,下面是一些常見的優化加速啟動的方法建議(以tomcat-7.+為例說明)。
1、 Jars包
1.1、將一些不必要的jar包去掉,當tomcat啟動加載jar包的時候,會去搜尋每個jar包里的class文件,這些都會耗費一些時間,如果你把不必要的jar包去掉了,很顯然會節省時間。
1.2、你可以將一些與TLD files、注解、網絡碎片無關的jar包加入到屬性
tomcat.util.scan.DefaultJarScanner.jarsToSkip的值中,這可以在conf/catalina.properties中進行設置。
2、 緩存
你可以在bin/catalina.sh中設置jvm所能使用到的緩存大小,如下:
JAVA_OPTS=’-Xms1024m -Xmx1024m’
3、 配置文件
Tomcat的配置比如server.xml是xml文件,而xml的解析也是要花時間的,如果我們能將xml配置文件盡可能地弄得簡潔一些,比如去掉一些沒有用到的節點,這也有助於減少啟動的時間,雖然這個節省的時間看來很少。
4、 應用程序
4.1、確保你程序在啟動的時候沒有一些處理很耗時的地方。
4.2、刪除掉tomcat自帶的目錄webapps及下面的所有內容,不然的話每次啟動的時候都會加載這些自帶的例子。
4.3、修改WEB-INF/web.xml文件,在默認的情況下中的屬性metadata-complete的值為false,也就是這樣:,這種情況下,tomcat在啟動時會去自動掃描是否有注解及網絡碎片,如果你不想tomcat這樣做,你可以將metadata-complete的值設為true。
5、 並行啟動多個應用程序
默認情況下,假設在一個tomcat下你有多個應用,那么啟動的時候,這些應用程序都是依次啟動的,除非所有應用全部啟動完畢,tomcat才會啟動完成,但從Tomcat 7.0.23+開始,你可以配置多個應用程序並行啟動了!你可以通過修改配置文件中Host里面的startStopThreads這個屬性的值來達到這個目的,將多個應用startStopThreads的值設為不同即可。
6、 Entropy Source
Tomcat 7+嚴重依賴SecureRandom這個類為它的session id或其它地方取得隨機數值,這取決於你的JRE,它有可能在tomcat啟動時造成非常大的耗時,比如,在子猴啟動tomcat-7.0.26的時候,它耗時近25秒!
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [24,790] milliseconds.
要解決這個問題,可以通過配置JRE使用非阻塞的Entropy Source,在bin/ catalina.sh中加入這么一行:-Djava.security.egd=file:/dev/./urandom 即可。
加入后我再啟動tomcat,整個啟動下降到僅耗時Server startup in 912 ms。