首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java/Tomcat/MySQL 生產環境核心配置速查:JVM 參數、自啟動、虛擬路徑、連接池、數據源

     編輯:Java 相關知識

生產環境 Java 應用叢集常需標準化配置:JVM 記憶體、Tomcat 系統服務、虛擬主機/路徑映射、連接器調優、JNDI 數據源。本文彙總實戰驗證的核心配置片段,涵蓋管理機/支撐機/測試機差異化參數,可直接納入 Ansible/Shell 自動化腳本。

1. JVM 記憶體參數 (catalina.sh / setenv.sh)

# 管理機 (高可用、大堆)
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。

2. Tomcat 系統服務自啟動 (/etc/rc.local 或 systemd)

SysV init (舊版 CentOS 6)

# /etc/rc.local
touch /var/lock/subsys/local
/etc/init.d/mysqld start
export JAVA_HOME=/home/j2sdk
cd /home/tomcat/bin
./startup.sh

systemd (現代標準,CentOS 7+/Ubuntu 16+)

# /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。

3. MySQL 自啟動

# systemd (現代)
systemctl enable --now mysqld

# SysV init
chkconfig mysqld on
/etc/init.d/mysqld start

4. 虛擬路徑映射 (server.xml <Host> 內)

<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** (效能、類加載洩漏風險)。
  • 生產建議:打包為單一 WAR 或 Spring Boot Fat JAR,避免多 Context 類隔離問題。

5. 連接器調優 (server.xml <Connector>)

<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 -->
  • NIO 非阻塞 + 線程池隔離 (Executor) 可進一步提升併發。
  • maxThreads 配合 JVM 線程上限、DB 連接池大小綜合規劃。

6. JNDI 數據源 (context.xml 或 META-INF/context.xml)

<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。

7. 配置管理最佳實踐

  • **外置配置**:CATALINA_BASE/conf 分離只讀 CATALINA_HOME,支援藍綠部署。
  • **版本控制**:server.xml、context.xml、setenv.sh 納入 Git,CI/CD 部署時模板渲染 (Ansible Jinja2 / Helm Values)。
  • **敏感信息**:密碼勿寫死,用 Vault/Consul/SealedSecrets 注入環境變數,context.xml 讀取 ${DB_PASSWORD}。
  • **驗證腳本**:部署後自動執行 curl -f https://localhost:8080/health、jcmd VM.flags 驗證 JVM 參數生效。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved