1. 優化JVM參數配置
調整JVM內存分配與垃圾回收策略是提升Tomcat啟動速度的基礎。在$CATALINA_HOME/bin/catalina.sh
(或setenv.sh
)中設置合理的JVM參數:
-Xms
)與最大堆內存(-Xmx
),避免啟動時頻繁擴容(如-Xms512m -Xmx1024m
);-XX:+UseG1GC
),其針對大內存堆的優化可減少GC停頓時間;-XX:MaxGCPauseMillis=200
),平衡吞吐量與響應速度。2. 禁用不必要的Tomcat組件與服務
移除未使用的功能模塊,減少啟動時的資源消耗:
server.xml
中注釋AJP連接器(<!-- <Connector port="8009" protocol="AJP/1.3" .../> -->
);setenv.sh
中添加-Dcom.sun.management.jmxremote=false
;context.xml
中將autoDeploy
設為false
(<Host ... autoDeploy="false" deployOnStartup="false">
),避免啟動時掃描webapps
目錄下的應用;webapps
目錄下的docs
、examples
、manager
等示例應用,減少不必要的加載。3. 優化系統底層配置
解決系統級瓶頸,提升Tomcat啟動效率:
SecureRandom
,默認使用/dev/random
可能因熵不足導致阻塞??赏ㄟ^以下方式解決:
$JAVA_HOME/jre/lib/security/java.security
,將securerandom.source=file:/dev/random
改為securerandom.source=file:/dev/./urandom
;catalina.sh
中添加JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/urandom"
;rng-tools
增大熵池(yum install rng-tools && systemctl start rngd
)。/etc/security/limits.conf
中添加* soft nofile 65536
、* hard nofile 65536
;/etc/sysctl.conf
,提升網絡性能(net.ipv4.tcp_tw_reuse=1
、net.ipv4.tcp_tw_recycle=1
、net.core.somaxconn=65535
),并執行sysctl -p
使配置生效;/etc/rc.local
中添加echo never > /sys/kernel/mm/transparent_hugepage/enabled
、echo never > /sys/kernel/mm/transparent_hugepage/defrag
。4. 調整Tomcat連接器與線程池配置
優化網絡I/O與線程處理能力,縮短請求響應時間:
server.xml
中的protocol
改為org.apache.coyote.http11.Http11NioProtocol
(默認是BIO,NIO更適合高并發);maxThreads
(最大線程數,如200)、minSpareThreads
(最小空閑線程數,如50)、acceptCount
(等待隊列大小,如100),避免線程過多導致上下文切換開銷或過少導致請求排隊;compression="on"
、compressionMinSize="2048"
、compressableMimeType="text/html,text/xml,text/plain,text/css,application/javascript"
,減少網絡傳輸數據量。5. 優化應用與依賴管理
減少應用啟動時的加載時間:
metadata-complete
:在WEB-INF/web.xml
中添加<web-app metadata-complete="true">
,告知Tomcat無需掃描類文件中的注解,減少啟動時的掃描時間;6. 使用高性能存儲與定期維護
提升系統IO性能,保持環境整潔:
webapps
、logs
、work
)放在SSD上,其高速讀寫性能可顯著縮短啟動時間;logs
目錄下的舊日志文件(如catalina.out
)、work
目錄下的編譯緩存(org.apache.jasper
),減少磁盤IO開銷。