1. 修改Tomcat启动脚本配置JVM内存参数
在Debian系统中,Tomcat的启动脚本catalina.sh
(位于/opt/tomcat/bin/
或/usr/share/tomcat/bin/
)是调整内存设置的核心文件。需在其中添加或修改JAVA_OPTS
环境变量,关键参数包括:
-Xms
:设置JVM初始堆内存(如-Xms512m
,建议与-Xmx
一致以避免频繁扩容);-Xmx
:设置JVM最大堆内存(如-Xmx2048m
,不超过物理内存的80%);-XX:MaxMetaspaceSize
:替代Java 8前的PermSize
/MaxPermSize
,设置元空间最大大小(如-XX:MaxMetaspaceSize=512m
,避免元空间溢出);-XX:+UseG1GC
,适合大内存应用)。export JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"
若需永久生效,可将上述命令添加到~/.bashrc
或/etc/profile
中,执行source ~/.bashrc
使配置生效。
2. 调整Tomcat线程池优化并发处理
线程池配置位于server.xml
(/opt/tomcat/conf/
)的Connector
元素中,合理设置可提升并发能力:
maxThreads
:最大线程数(如200
,根据应用并发量调整,不宜过大避免线程争用);minSpareThreads
:最小空闲线程数(如25
,保持基础并发能力);maxConnections
:最大连接数(如10000
,允许更多请求排队等待处理);acceptCount
:接收队列长度(如1000
,队列满则拒绝请求)。<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="200" minSpareThreads="25" maxConnections="10000"
acceptCount="1000" connectionTimeout="20000" />
修改后需重启Tomcat使配置生效。
3. 启用HTTP压缩减少内存与带宽消耗
在server.xml
的Connector
中添加压缩配置,可降低响应数据量,间接减少Tomcat内存占用:
compression="on"
:启用压缩;compressionMinSize="2048"
:设置压缩阈值(2KB以上才压缩);compressableMimeType
:指定可压缩的MIME类型(如文本、CSS、JS等)。<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,application/json" />
重启Tomcat后生效,可通过浏览器开发者工具查看响应头是否包含Content-Encoding: gzip
验证。
4. 清理不必要的文件与应用
定期清理Tomcat目录中的冗余文件,减少内存占用:
webapps
目录中未使用的WAR包或解压后的应用目录;logs
目录中的历史日志文件(可使用logrotate
工具自动管理);work
目录中的JSP编译缓存(Tomcat重启后会自动生成);catalina.properties
中添加org.apache.catalina.startup.ContextConfig.jarsToSkip=*
),减少启动时的类加载。5. 监控与验证内存配置效果
使用工具监控Tomcat内存使用情况,确保配置合理:
ps -ef | grep tomcat
(获取进程ID);jmap -heap <PID>
(如jmap -heap 1234
,显示初始堆、最大堆、各代内存使用情况);top
(按M
排序内存占用)、htop
(更直观的内存/线程监控)、jconsole
(图形化监控堆内存、线程、GC情况)。-Xms
/-Xmx
(如频繁Full GC则需增大堆内存)或垃圾回收器(如G1GC回收慢则可尝试-XX:+UseParallelGC
)。6. 系统级资源限制(可选)
若需限制Tomcat的资源使用,避免影响系统稳定性,可通过以下方式:
/etc/systemd/system/tomcat.service
,在[Service]
部分添加:MemoryMax=2G # 限制最大内存为2GB
执行systemctl daemon-reload && systemctl restart tomcat
生效;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
)。