1. 调整JVM内存参数(核心优化)
修改Tomcat的catalina.sh文件(位于/path/to/tomcat/bin/),通过设置JAVA_OPTS环境变量调整堆内存、元空间及垃圾回收器。关键参数说明:
-Xms:初始堆内存(建议与-Xmx一致,避免频繁扩容);-Xmx:最大堆内存(不超过物理内存的80%,如8GB内存可设为-Xmx6g);-XX:MaxMetaspaceSize:元空间最大大小(Java 8+替代永久代,避免PermGen space溢出,默认无限制,建议设为256m-512m);-XX:+UseG1GC:使用G1垃圾回收器(适用于大内存,平衡吞吐量与延迟)。export JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"
若通过systemd管理服务,可编辑/etc/systemd/system/tomcat.service,在[Service]部分添加:
Environment="JAVA_OPTS=-server -Xms2048m -Xmx2048m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"
修改后执行systemctl daemon-reload使配置生效。
2. 优化Tomcat线程池配置(提升并发处理能力)
修改server.xml(位于/path/to/tomcat/conf/)中的Connector元素,调整线程池参数以适应高并发场景:
maxThreads:最大线程数(默认200,可根据CPU核心数调整,如8核可设为200-400);minSpareThreads:最小空闲线程数(保持默认25即可,快速响应突发请求);acceptCount:请求队列长度(默认100,队列满则拒绝请求,建议设为1000)。<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
minSpareThreads="25"
acceptCount="1000" />
若使用NIO连接器(默认),可显式指定protocol="org.apache.coyote.http11.Http11NioProtocol"以提升性能。
3. 启用HTTP压缩(减少内存与带宽占用)
在server.xml的Connector元素中添加压缩配置,压缩静态资源(如HTML、CSS、JS):
<Connector ... compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />
compression="on":启用压缩;compressionMinSize="2048":仅压缩大于2KB的响应;compressableMimeType:指定可压缩的MIME类型。4. 清理不必要的资源(降低内存负载)
webapps目录下未使用的WAR包或解压后的文件夹;server.xml、web.xml中的注释及无用标签;lib目录中不需要的JAR包(如旧版本的数据库驱动);work(编译后的JSP文件)和logs(日志文件)目录中的内容。5. 禁用不必要功能(减少内存消耗)
catalina.properties(位于/path/to/tomcat/conf/)中添加:org.apache.catalina.startup.ContextConfig.jarsToSkip=*.jar
避免Tomcat扫描所有JAR文件的TLD标签,减少启动时间和内存占用;web.xml中的WebSocket配置,并删除相关依赖库。6. 监控与验证配置效果
ps命令查看Tomcat进程的内存占用:ps -ef | grep tomcat
jmap命令生成堆转储文件,分析内存使用情况:sudo jmap -heap <PID>
top、htop(查看系统内存)、jconsole、jvisualvm(查看Tomcat内存、线程、GC情况)监控内存使用,根据实际情况调整参数。7. 系统级资源限制(防止内存耗尽)
/etc/systemd/system/tomcat.service,在[Service]部分添加:MemoryMax=2G # 限制Tomcat最大使用2GB内存
MemoryHigh=1.8G # 内存使用超过1.8GB时触发警告
执行systemctl daemon-reload和systemctl restart tomcat使配置生效;cgroup-tools,创建内存限制组:sudo cgcreate -g memory:/tomcat
echo "2G" | sudo tee /sys/fs/cgroup/memory/tomcat/memory.limit_in_bytes
将Tomcat进程添加到cgroup:echo <PID> | sudo tee /sys/fs/cgroup/memory/tomcat/tasks
此方法可严格限制Tomcat的内存使用,避免影响系统稳定性。