生產環境 Java 應用叢集常需標準化配置:JVM 記憶體、Tomcat 系統服務、虛擬主機/路徑映射、連接器調優、JNDI 數據源。本文彙總實戰驗證的核心配置片段,涵蓋管理機/支撐機/測試機差異化參數,可直接納入 Ansible/Shell 自動化腳本。
# 管理機 (高可用、大堆)
export JAVA_OPTS="-Xms256m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
# 支撐機 (中等)
export JAVA_OPTS="-Xms256m -Xmx768m -XX:+UseG1GC"
# 測試機 (小堆、快速啟動)
export JAVA_OPTS="-Xms128m -Xmx512m"
# 兼容舊內核 (RHEL 4/5)
export LD_ASSUME_KERNEL=2.4.1
現代建議 (JDK 11+):-Xms2g -Xmx2g -XX:+UseZGC -XX:+ZGenerational (大堆低延遲)、-XX:NativeMemoryTracking=summary 診斷 Off-Heap。
# /etc/rc.local
touch /var/lock/subsys/local
/etc/init.d/mysqld start
export JAVA_HOME=/home/j2sdk
cd /home/tomcat/bin
./startup.sh
# /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat
After=network.target mysqld.service
[Service]
Type=forking
User=tomcat
Environment=JAVA_HOME=/usr/lib/jvm/java-17
Environment=CATALINA_HOME=/home/tomcat
Environment=CATALINA_BASE=/home/tomcat
Environment=JAVA_OPTS="-Xms2g -Xmx2g -XX:+UseZGC"
ExecStart=/home/tomcat/bin/startup.sh
ExecStop=/home/tomcat/bin/shutdown.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
啟用:systemctl daemon-reload && systemctl enable --now tomcat。
# systemd (現代)
systemctl enable --now mysqld
# SysV init
chkconfig mysqld on
/etc/init.d/mysqld start
<Context path="/backup" docBase="/home/backup" reloadable="false" />
<Context path="/arbitration" docBase="/home/arbitration" reloadable="true" />
<Context path="/netbar" docBase="/home/netbar" reloadable="true" />
<Context path="/beijing" docBase="/home/beijing" reloadable="true" />
reloadable="true":開發環境熱部署,生產**必須 false** (效能、類加載洩漏風險)。<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="500" minSpareThreads="50"
acceptCount="200" connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"
compression="on" compressableMimeType="text/html,text/xml,text/plain,text/css,application/json"
maxHttpHeaderSize="16384" />
<!-- SSL 終結建議由 Nginx/ALB 負責,Tomcat 僅 HTTP -->
Executor) 可進一步提升併發。maxThreads 配合 JVM 線程上限、DB 連接池大小綜合規劃。<Resource name="jdbc/netbar" auth="Container" type="javax.sql.DataSource"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://192.168.16.20:3306/netbar?useUnicode=true&characterEncoding=utf8mb4&useSSL=false&serverTimezone=Asia/Shanghai"
username="root" password="gtigstarcenter"
maxTotal="50" maxIdle="20" minIdle="5"
maxWaitMillis="10000"
testOnBorrow="true" validationQuery="SELECT 1"
removeAbandonedOnBorrow="true" removeAbandonedTimeout="60"
logAbandoned="true" />
Spring Boot 直接 @Resource(name="jdbc/netbar") DataSource ds 或 spring.datasource.jndi-name=java:comp/env/jdbc/netbar。
CATALINA_BASE/conf 分離只讀 CATALINA_HOME,支援藍綠部署。server.xml、context.xml、setenv.sh 納入 Git,CI/CD 部署時模板渲染 (Ansible Jinja2 / Helm Values)。context.xml 讀取 ${DB_PASSWORD}。curl -f https://localhost:8080/health、jcmd VM.flags 驗證 JVM 參數生效。