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

Tomcat 生產環境調優全攻略:內存、線程池、連接器與 JMX 監控配置

     編輯:Java 綜合教學

Tomcat 生產環境調優全攻略:內存、線程池、連接器與 JMX 監控配置

預設 Tomcat 參數無法滿足生產環境的高併發與穩定性需求。本文系統整理 JVM 內存設定、執行緒池配置、Connector 連接參數調優、JMX 遠程監控及 Web 應用部署等關鍵優化項目。

一、JVM 內存與時區參數設定

修改啟動腳本最前端,確保參數優先生效。

Windows (catalina.bat)

set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=GMT+08

Linux (catalina.sh)

JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"

參數說明:

  • -Xms/-Xmx:堆初始/最大值,建議設為相同值避免動態擴縮容震盪。
  • -XX:PermSize/MaxPermSize:永久代/元空間大小(JDK 8+ 改用 MetaspaceSize/MaxMetaspaceSize)。
  • -Duser.timezone:修正伺服器時區偏移問題(Windows 用 GMT+08,Linux 用 Asia/Shanghai)。

二、執行緒池配置

使用共享執行緒池以少量線程處理大量請求,提升吞吐量。

1. 定義 Executor (server.xml)

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    maxThreads="500" minSpareThreads="20" maxIdleTime="60000" />
  • maxThreads=500:最大線程數,一般伺服器足夠。
  • minSpareThreads=20:啟動時預創建的核心線程數。
  • maxIdleTime=60000:空閒線程存活時間(毫秒),超過則回收。

2. Connector 引用執行緒池

<Connector executor="tomcatThreadPool"
    port="80" protocol="HTTP/1.1"
    connectionTimeout="60000"
    keepAliveTimeout="15000"
    maxKeepAliveRequests="1"
    redirectPort="443"
    ... />

注意:多個 Connector 可共用同一個 Executor。

三、Connector 關鍵參數微調

<Connector executor="tomcatThreadPool"
    port="80" protocol="HTTP/1.1"
    connectionTimeout="30000"
    keepAliveTimeout="15000"
    maxKeepAliveRequests="100"
    redirectPort="443"
    maxHttpHeaderSize="8192"
    URIEncoding="UTF-8"
    enableLookups="false"
    acceptCount="100"
    disableUploadTimeout="true" />
參數建議值作用
connectionTimeout30000網絡連接超時(ms),0 表永不超時(有風險)
keepAliveTimeout15000長連接最大保持時間(ms)
maxKeepAliveRequests100~200單連接最大請求數,1 表禁用,-1 表無限制
maxHttpHeaderSize8192HTTP 請求頭最大字節數
URIEncodingUTF-8URL 編碼格式,防止中文亂碼
acceptCount100當所有線程忙碌時,請求排隊隊列長度
disableUploadTimeouttrue上傳時使用超時機制
enableLookupsfalse禁用 DNS 反查,提升處理能力
maxThreads200(預設)若未使用 Executor,此處限制最大處理線程數
minSpareThreads4(預設)啟動時創建的最小空閒線程數

四、JMX 遠程監控啟用

便於使用 JConsole、VisualVM 等工具監控 JVM 狀態。

Windows (catalina.bat)

set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=10090
 -Dcom.sun.management.jmxremote.ssl=false
 -Dcom.sun.management.jmxremote.authenticate=false
 -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
 -Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"

Linux (catalina.sh)

JAVA_OPTS="-Dcom.sun.management.jmxremote.port=10090
 -Dcom.sun.management.jmxremote.ssl=false
 -Dcom.sun.management.jmxremote.authenticate=false
 -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
 -Djava.util.logging.config.file=%CATALINA_BASE%/conf/logging.properties"

前置條件:確保 JDK/jre/lib/management/management.properties 存在。重啟後使用 jconsole host:10090 連接。

五、新增 Web 應用部署

在 server.xml 的 <Host> 標籤內添加:

<Context displayName="OA" docBase="/app/web-apps/GACWP" path="" />

path="" 表示部署為根路徑應用(即 https://host:port/ 直接訪問)。

六、集群與負載均衡

Tomcat 6+ 支援分散式部署與 Session 複製,可透過 <Cluster> 元素配置,配合 Nginx/Apache 實現前端負載均衡,大幅提升可用性與擴展性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved