堆内存是Tomcat运行应用的主要内存区域,合理设置可避免内存溢出(OOM)或过度浪费。需修改catalina.sh(位于$CATALINA_HOME/bin目录)中的JAVA_OPTS变量:
-Xms2g)。-Xmx12g),避免占用过多内存导致系统或其他进程崩溃。-Xmn512m),年轻代用于存放新创建的对象,适当增大可减少Minor GC频率。-XX:MaxMetaspaceSize=256m(避免元空间溢出)。示例配置(catalina.sh开头添加):
export JAVA_OPTS="-server -Xms2g -Xmx2g -Xmn512m -XX:MaxMetaspaceSize=256m"
说明:-server启用服务器模式(针对多CPU优化),是必选参数。
垃圾回收器的选择直接影响内存回收效率和停顿时间。推荐:
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200" # 目标最大GC停顿200ms
export JAVA_OPTS="$JAVA_OPTS -XX:+UseParallelGC -XX:ParallelGCThreads=4" # 多线程GC(线程数=CPU核心数)
注意:Java 8及以下版本若用Parallel GC,需替换-XX:PermSize/-XX:MaxPermSize为-XX:MetaspaceSize(但建议升级至Java 11+)。
线程池大小决定了Tomcat同时处理的请求数,需修改server.xml(位于$CATALINA_HOME/conf目录)中的Connector配置:
maxThreads="1000")。示例配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxThreads="500"
minSpareThreads="50"
maxConnections="20000"
acceptCount="1000"
redirectPort="8443" />
说明:线程数并非越大越好,过大会导致内存占用过高(每个线程约消耗1MB栈内存),需结合服务器内存调整。
启用HTTP压缩可减少传输数据量,间接降低Tomcat处理请求的内存消耗。修改server.xml中的Connector:
<Connector port="8080" protocol="HTTP/1.1"
compression="on"
compressionMinSize="2048" # 2KB以上数据启用压缩
compressableMimeType="text/html,text/xml,text/javascript,application/json" />
说明:压缩会增加CPU开销(约5%-10%),但能显著减少内存和带宽使用,适合文本类数据。
jmap命令查看堆内存分布(需替换<pid>为Tomcat进程ID):sudo jmap -heap <pid>
-Xloggc:/var/log/tomcat/gc.log参数记录GC日志,使用VisualVM或GCViewer分析日志(如GC频率、停顿时间)。Prometheus+Grafana搭建监控体系,跟踪内存使用趋势(如堆内存占用率、GC时间占比)。通过以上步骤,可根据Debian服务器的硬件配置和应用需求,有效优化Tomcat的内存使用,提升性能和稳定性。需注意:所有参数调整后需重启Tomcat生效,且建议在测试环境验证后再应用于生产环境。