Tomcat在CentOS上的性能優化需從操作系統層、JVM層、Tomcat自身配置層三個維度綜合調整,以下是具體優化措施:
操作系統是Tomcat運行的基礎,需調整內核參數與文件描述符限制以提升并發處理能力。
調整文件描述符限制
Tomcat的高并發依賴足夠的文件描述符(FD),默認值(1024)過低。編輯/etc/security/limits.conf
,添加以下內容:
* soft nofile 65536
* hard nofile 65536
這將允許單個用戶最多打開65536個文件描述符,解決高并發下的“Too many open files”問題。
優化內核網絡參數
編輯/etc/sysctl.conf
,添加以下參數以提升TCP連接效率:
net.core.somaxconn = 65535 # 監聽隊列最大長度(默認128,需與Tomcat的acceptCount匹配)
net.ipv4.tcp_tw_reuse = 1 # 允許復用TIME_WAIT狀態的連接(減少連接建立開銷)
net.ipv4.tcp_tw_recycle = 1 # 快速回收TIME_WAIT連接(注意:若存在NAT環境可能引發問題,需謹慎使用)
fs.file-max = 65536 # 系統全局最大文件描述符數
執行sysctl -p
使配置生效。
禁用透明大頁(Transparent Huge Pages, THP)
THP會導致內存碎片化,影響Java應用的GC性能。編輯/etc/rc.local
(需賦予執行權限),添加:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
重啟服務器使設置生效。
JVM內存配置直接影響Tomcat的穩定性和GC頻率,需根據服務器內存大小合理分配。
設置堆內存大小
通過JAVA_OPTS
調整初始堆(-Xms
)和最大堆(-Xmx
),建議兩者相等以避免堆擴容帶來的性能波動。例如,8GB內存服務器可配置:
export JAVA_OPTS="$JAVA_OPTS -Xms4G -Xmx4G"
(注:需預留1/4內存給系統和其他進程,避免OOM)。
選擇合適的垃圾回收器
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
export JAVA_OPTS="$JAVA_OPTS -XX:+UseParallelGC"
export JAVA_OPTS="$JAVA_OPTS -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
```。
調整GC線程數
對于多核CPU,增加并行GC線程數可提升GC效率。例如,4核CPU配置:
export JAVA_OPTS="$JAVA_OPTS -XX:ParallelGCThreads=4"
```。
Tomcat的Connector與線程池配置是性能優化的核心,直接影響請求處理能力。
使用高性能Connector
替換默認的BIO(阻塞式)Connector為NIO(非阻塞式)或NIO2,編輯conf/server.xml
:
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol" <!-- NIO2性能更優 -->
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
minSpareThreads="50"
acceptCount="1000"
compression="on"
compressionMinSize="8192"
URIEncoding="UTF-8"
/>
protocol
:選擇Http11NioProtocol
(NIO)或Http11Nio2Protocol
(NIO2);maxThreads
:最大線程數(根據并發量調整,建議200-500);minSpareThreads
:最小空閑線程數(保持50-100,避免頻繁創建線程);acceptCount
:監聽隊列長度(需≥somaxconn
,避免連接被拒絕);compression
:啟用GZIP壓縮(減少傳輸數據量,提升頁面加載速度);URIEncoding
:設置URL編碼為UTF-8(避免中文亂碼)。配置線程池(可選,但推薦)
通過Executor
元素定義全局線程池,供多個Connector共享,提升線程利用率。編輯conf/server.xml
:
<Executor
name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="50"
maxQueueSize="100"
/>
<Connector
executor="tomcatThreadPool"
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
/>
maxThreads
:線程池最大線程數(需大于單個Connector的maxThreads
);maxQueueSize
:等待隊列長度(避免無限制排隊,建議100以內)。禁用不必要的功能
conf/server.xml
,將Host
標簽的autoDeploy
設為false
,避免Tomcat頻繁掃描webapps
目錄:<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false">
conf/server.xml
,在Connector
標簽中添加server="Apache"
,避免暴露Tomcat版本(減少安全風險):<Connector ... server="Apache" />
conf/server.xml
,將Connector
標簽的enableLookups
設為false
(避免每次請求都進行DNS解析,提升性能):<Connector ... enableLookups="false" />
```。
調整JDK隨機數生成器
Tomcat啟動時使用/dev/random
生成隨機數,可能導致啟動緩慢。編輯JAVA_HOME/jre/lib/security/java.security
,將securerandom.source
改為/dev/urandom
:
securerandom.source=file:/dev/urandom
或在catalina.sh
中添加:
export JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/urandom"
這將提升啟動速度(尤其在高并發場景下)。
安裝rng-tools增加熵池
若服務器熵池不足(cat /proc/sys/kernel/random/entropy_avail
值低),會導致隨機數生成緩慢。安裝rng-tools
并啟動服務:
yum install rng-tools -y
systemctl start rngd
systemctl enable rngd
這將提升熵池大小,加快隨機數生成。
監控與調優
使用監控工具(如Prometheus+Grafana、VisualVM、JConsole)實時監控Tomcat的CPU、內存、線程、GC等指標,根據監控結果調整配置(如增加maxThreads
、擴大堆內存)。
通過以上優化措施,可顯著提升Tomcat在CentOS上的性能、并發處理能力和穩定性。需根據實際業務場景(如并發量、應用類型)調整參數,避免盲目增大配置導致的資源浪費。