1. 调整JVM内存参数,避免堆内存溢出
Tomcat的资源占用高常与JVM内存配置不当有关。需通过修改catalina.sh(Linux)或catalina.bat(Windows)文件,合理设置堆内存大小及垃圾回收器:
-Xms(初始堆)与-Xmx(最大堆)设为相同值(如-Xms1024m -Xmx1024m),避免堆内存动态调整带来的性能损耗;-XX:+UseG1GC),其并行处理能力能有效降低Full GC停顿时间;-XX:NewRatio设置新生代与老年代的比例(如-XX:NewRatio=2表示新生代占堆的1/3),优化对象生命周期管理。2. 优化Tomcat线程池配置,提升并发处理能力
线程池参数直接影响Tomcat处理请求的效率。需在server.xml中配置Executor(线程池)及Connector(连接器):
<Executor>元素设置maxThreads(最大线程数,如200-500,根据CPU核心数调整)、minSpareThreads(最小空闲线程数,如10-50,保持基础并发能力);Connector中通过executor属性引用上述线程池(如<Connector executor="tomcatThreadPool" .../>);org.apache.coyote.http11.Http11NioProtocol)或NIO2(org.apache.coyote.http11.Http11Nio2Protocol)替代默认的BIO,提升网络I/O性能。3. 配置连接器参数,减少资源浪费
通过server.xml中的Connector配置,优化请求处理流程:
compression="on",对响应内容(如HTML、CSS、JS)进行Gzip压缩,减少网络传输数据量(可降低带宽占用约50%-70%);connectionTimeout="30000"(30秒),避免长时间等待无效请求;maxConnections="10000"(根据服务器性能调整),防止过多连接耗尽系统资源;enableLookups="false",避免Tomcat对客户端域名进行反向解析(减少DNS查询开销)。4. 优化操作系统内核参数,提升系统支撑能力
Tomcat的性能受操作系统限制,需调整以下内核参数(修改/etc/sysctl.conf并执行sysctl -p生效):
fs.file-max=65536,允许系统打开更多文件(Tomcat处理请求需频繁操作文件);net.core.somaxconn=65535,增加TCP连接队列长度(避免连接被拒绝);net.ipv4.tcp_tw_reuse=1,允许复用TIME_WAIT状态的连接(减少TCP连接建立的开销);echo never > /sys/kernel/mm/transparent_hugepage/enabled,避免内存碎片导致的性能下降。5. 管理应用与Tomcat服务,减少不必要开销
server.xml中设置autoDeploy="false",避免Tomcat频繁扫描并部署应用(减少CPU占用);server.xml的Connector中添加server=" ",防止暴露Tomcat版本(减少安全扫描带来的资源消耗);webapps目录下未使用的WAR包及解压后的文件夹,释放磁盘空间及内存;<Context>元素的cachingAllowed="true"属性,缓存静态资源(如图片、CSS),减少对磁盘的访问次数。6. 监控与诊断,定位性能瓶颈
使用工具实时监控Tomcat及系统资源,定位具体瓶颈:
jconsole、VisualVM或Arthas工具,查看堆内存使用情况、垃圾回收频率(若Full GC频繁,需调整堆大小或垃圾回收器);top(查看CPU占用)、free -h(查看内存使用)、ss -tulnp(查看网络连接)等命令,分析系统资源瓶颈;/manager/html应用(需开启)查看当前活动的线程数、请求数、会话数等指标(判断是否需要调整线程池)。