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内存)等工具验证配置是否生效。