Tomcat在Linux环境下的启动参数调优主要围绕JVM内存配置、线程池优化、连接器(Connector)参数调整及系统级限制四大核心方向展开,旨在提升高并发下的处理能力、降低内存溢出风险并优化资源利用率。
JVM内存配置是Tomcat稳定运行的基础,需根据应用内存需求和服务器物理内存调整,核心参数包括:
-Xms2048m),建议与-Xmx设置为相同值,避免堆内存频繁扩容带来的性能损耗。-Xmx4096m),通常设置为物理内存的70%-80%(如16GB物理内存可设为12GB-14GB),防止内存溢出。-Xmn1024m),建议为堆内存的1/3-1/2(如堆内存4GB时,年轻代设为1-2GB),年轻代过大可能导致老年代空间不足,过小则会增加Minor GC频率。-XX:PermSize=256m -XX:MaxPermSize=512m),用于存储类元数据,若应用有大量第三方jar或动态类生成(如JSP编译),需适当增大;Java 8及以上版本需替换为-XX:MetaspaceSize(初始元空间)和-XX:MaxMetaspaceSize(最大元空间,建议设为物理内存的1/4)。-XX:+UseConcMarkSweepGC(CMS收集器)。System.gc(),避免应用代码误触发Full GC导致性能骤降。Tomcat通过线程池处理请求,合理配置线程池参数可避免线程过多导致的CPU竞争或线程过少导致的请求排队:
server.xml中配置<Executor>,供多个Connector共享,参数如下:
name:线程池名称(如tomcatThreadPool),需唯一。namePrefix:线程名称前缀(如catalina-exec-),便于日志识别。maxThreads:线程池最大线程数(如500),需根据服务器CPU核心数(如8核)和应用特性调整(建议CPU核心数×100-200),避免过多线程导致CPU上下文切换开销。minSpareThreads:最小空闲线程数(如50),保持常驻线程以应对突发请求,减少线程创建时间。maxIdleTime:线程空闲超时时间(如60000毫秒=1分钟),超过则销毁空闲线程,释放资源。prestartminSpareThreads:是否启动时创建minSpareThreads数量的线程(设为true),避免首次请求时线程创建延迟。server.xml中配置<Connector>,关联上述线程池,关键参数:
protocol:连接器协议(如org.apache.coyote.http11.Http11NioProtocol,适用于高并发场景;Java 8及以上推荐Http11Nio2Protocol,性能更优)。executor:指定使用的线程池名称(如tomcatThreadPool),需与<Executor>的name一致。maxConnections(Tomcat 8.5+):Tomcat能接受的最大连接数(如10000),超过则拒绝请求,需结合系统级限制调整。acceptCount:请求等待队列长度(如100),当所有线程繁忙时,新请求进入队列;队列满则拒绝请求(HTTP状态码503),建议设置为maxThreads的1-2倍。连接器是Tomcat与客户端通信的桥梁,需根据协议和场景调整参数:
Http11NioProtocol)或NIO2(Http11Nio2Protocol),相比传统的BIO(Http11BioProtocol),NIO支持非阻塞IO,能处理更多并发连接(如1万+),适合高并发场景。UTF-8(如URIEncoding="UTF-8"),避免中文或特殊字符URL导致的乱码问题。20000毫秒=20秒),超过则关闭连接,防止长时间占用资源。true),避免大文件上传时因超时中断。on),减少网络传输数据量(如compression="on"),需配合compressableMimeType(如text/html,text/xml,text/javascript,application/json)指定压缩的MIME类型,compressionMinSize(如2048字节=2KB)设置最小压缩大小(小于该值的文件不压缩)。Linux系统默认的文件描述符和进程数限制可能制约Tomcat的高并发能力,需调整:
/etc/security/limits.conf文件,添加以下内容(针对Tomcat用户,如tomcat):* soft nofile 65536
* hard nofile 65536
其中soft为软限制(当前生效),hard为硬限制(最大值),设置为65536可支持大量并发连接。修改后需重新登录用户生效。/etc/sysctl.conf文件,添加以下参数以优化网络性能:net.core.somaxconn = 65535 # 监听队列最大长度(默认128,需大于Tomcat的acceptCount)
net.ipv4.tcp_tw_reuse = 1 # 允许复用TIME_WAIT状态的连接
net.ipv4.tcp_tw_recycle = 1 # 快速回收TIME_WAIT连接(Linux 4.12+已移除,需谨慎使用)
net.ipv4.tcp_fin_timeout = 30 # TIME_WAIT状态超时时间(默认60秒,缩短可快速释放端口)
执行sysctl -p使参数生效。server.xml中关闭AJP连接器(若未使用Apache反向代理):<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />,减少不必要的资源占用。catalina.sh(Linux)或catalina.bat(Windows)文件开头添加JVM参数,如JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -Dfile.encoding=UTF-8",-Djava.awt.headless=true用于无图形界面环境(如服务器),避免字体渲染问题;-Dfile.encoding=UTF-8统一文件编码。jstat(监控GC情况)、jstack(分析线程阻塞)、top(查看CPU和内存使用)等工具定期监控Tomcat性能,根据监控结果调整参数(如GC频繁则增大堆内存,线程阻塞则增加maxThreads)。以上参数需根据实际应用场景(如并发量、应用类型、服务器配置)进行调整,建议通过压力测试(如JMeter)验证优化效果,避免盲目增大参数导致资源浪费。