CentOS下Tomcat資源限制設置指南
在CentOS系統中,Tomcat的資源限制主要包括操作系統級資源限制(文件描述符、進程數)和Tomcat自身資源限制(內存、線程池)。合理配置這些參數能有效提升Tomcat的并發處理能力和穩定性。
文件描述符用于標識系統中的打開文件、套接字等資源。Tomcat作為高并發服務,需提高其文件描述符限制以避免“Too many open files”錯誤。
tomcat
用戶,執行ulimit -n 65535
。/etc/security/limits.conf
,添加以下內容(針對tomcat
用戶):tomcat soft nofile 65535
tomcat hard nofile 65535
若/etc/security/limits.d/20-nproc.conf
存在(CentOS 7+),需確保其中的nproc
設置不低于tomcat
用戶的nofile
值(如tomcat soft nproc 65535
),避免進程數限制覆蓋文件描述符限制。進程數限制決定了tomcat
用戶能創建的最大進程數。
/etc/security/limits.d/20-nproc.conf
(CentOS 7+優先),添加:tomcat soft nproc 65535
tomcat hard nproc 65535
若未單獨配置tomcat
用戶,需修改*
的nproc
值(如* soft nproc 65535
),但建議針對tomcat
用戶單獨設置以提升安全性。/etc/sysctl.conf
,添加:kernel.pid_max = 65535
執行sysctl -p
使配置生效。Tomcat的內存消耗主要由JVM堆內存決定,需根據服務器物理內存調整,避免內存溢出(OOM)。
/usr/share/tomcat/bin/catalina.sh
(或/opt/tomcat/bin/catalina.sh
),在#!/bin/sh
后添加:JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx2048m -XX:MaxPermSize=256m"
參數說明:
-Xms
:初始堆內存(如512MB);-Xmx
:最大堆內存(如2048MB);-XX:MaxPermSize
:永久代內存(Java 7及以下版本,Java 8+改為-XX:MaxMetaspaceSize
)。線程池決定了Tomcat同時處理的請求數,需結合CPU核心數和業務負載調整。
server.xml
直接配置/etc/tomcat/conf/server.xml
(或/opt/tomcat/conf/server.xml
),找到<Connector>
標簽,添加/修改以下參數:<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200" <!-- 最大線程數(建議CPU核心數×2~4) -->
minSpareThreads="20" <!-- 最小空閑線程數(建議maxThreads的10%~20%) -->
acceptCount="300" <!-- 最大排隊請求數(建議maxThreads的1.5~2倍)" />
Executor
定義線程池(推薦)<Service>
標簽內添加<Executor>
,然后在<Connector>
中引用:<Service name="Catalina">
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="200" minSpareThreads="20" />
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
executor="tomcatThreadPool" />
</Service>
兩種方法的區別:Executor
可復用線程池,減少線程創建/銷毀的開銷,適合多Connector
場景。sudo systemctl restart tomcat
)使配置生效。ulimit -a
(查看文件描述符)、ps -ef | grep tomcat
(查看進程數)、jconsole
(查看JVM內存)等工具驗證配置是否生效。