Tomcat依賴Java環境,需先安裝JDK。推薦使用OpenJDK(如java-1.8.0-openjdk
),步驟如下:
sudo yum update -y
sudo yum install java-1.8.0-openjdk-devel -y
java -version
(需顯示Java版本信息)/etc/profile
,添加以下內容并執行source /etc/profile
:export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
/opt/tomcat
):wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz
tar -zxvf apache-tomcat-9.0.56.tar.gz -C /opt/
mv /opt/apache-tomcat-9.0.56 /opt/tomcat
tomcat
用戶(需提前創建:sudo groupadd tomcat; sudo useradd -M -s /bin/nologin -g tomcat tomcat
):sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod +x /opt/tomcat/bin/*.sh
/etc/systemd/system/tomcat.service
,內容如下:[Unit]
Description=Apache Tomcat 9 Servlet Container
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
Restart=on-failure
[Install]
WantedBy=multi-user.target
加載服務并啟動:sudo systemctl daemon-reload; sudo systemctl enable tomcat; sudo systemctl start tomcat
JVM內存配置直接影響Tomcat性能,需根據服務器內存和應用需求調整。編輯$CATALINA_HOME/bin/catalina.sh
(或/etc/sysconfig/tomcat
),添加/修改JAVA_OPTS
:
JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:MaxTenuringThreshold=15"
-Xms1024m
:初始堆內存(建議設為服務器內存的1/4);-Xmx2048m
:最大堆內存(建議不超過服務器內存的1/2);-XX:MetaspaceSize
/-XX:MaxMetaspaceSize
:元空間大?。ㄌ娲鶭ava 7的PermGen);-XX:+UseG1GC
:啟用G1垃圾回收器(適合大內存、高并發場景);-XX:MaxTenuringThreshold
:對象晉升老年代的年齡閾值(默認15)線程池是Tomcat處理并發請求的核心,需合理設置maxThreads
(最大線程數)、minSpareThreads
(最小空閑線程數)等參數。有兩種配置方式:
編輯server.xml
中的<Connector>
標簽,添加以下參數:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="50"
acceptCount="1000" />
maxThreads
:最大并發線程數(建議為CPU核心數的2-4倍,如4核服務器設為80-160);minSpareThreads
:Tomcat啟動時創建的空閑線程數(建議設為maxThreads
的10%-20%,如50);acceptCount
:請求隊列長度(當所有線程繁忙時,允許排隊的請求數,建議為maxThreads
的1.5-2倍,如1000)在server.xml
的<Service>
標簽內添加<Executor>
,再引用它:
<Service name="Catalina">
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="50"
maxIdleTime="60000"/>
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
</Service>
默認的HTTP/1.1協議可通過調整參數提升性能,或升級至HTTP/2:
protocol
為org.apache.coyote.http11.Http11NioProtocol
(默認已啟用):<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
... />
Http2Protocol
:<Connector port="8443" protocol="org.apache.coyote.http2.Http2Protocol"
SSLEnabled="true"
keystoreFile="/path/to/keystore.jks"
keystorePass="changeit"
maxThreads="200" />
<Connector ... compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/plain,application/json" />
/etc/security/limits.conf
,添加以下內容(提高用戶可打開文件數):* soft nofile 65536
* hard nofile 65536
/etc/sysctl.conf
,添加以下內容(優化TCP連接):net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
生效配置:sudo sysctl -p
/etc/rc.local
,添加以下內容(避免內存碎片):echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
開放Tomcat端口(默認8080),允許外部訪問:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
驗證端口開放:sudo firewall-cmd --zone=public --query-port=8080/tcp
(返回yes
表示成功)
catalina.out
(位于$CATALINA_HOME/logs
)查看啟動和運行日志,排查錯誤;jconsole
、jvisualvm
工具監控堆內存、線程、GC情況;以上配置需根據實際業務場景(如并發量、應用類型)進行調整,建議在測試環境驗證后再應用于生產環境。