1. 定位Tomcat启动脚本
在Debian系统中,Tomcat的启动脚本catalina.sh通常位于/usr/share/tomcat*/bin/目录下(如/usr/share/tomcat9/bin/catalina.sh)。这是配置内存参数的核心文件。
2. 修改catalina.sh设置基础内存参数
打开catalina.sh文件,建议在文件顶部(# OS specific support.段落之后)添加JAVA_OPTS变量,用于定义JVM堆内存大小。关键参数说明:
-Xms:初始堆内存(如-Xms512m,表示启动时分配512MB);-Xmx:最大堆内存(如-Xmx1024m,表示运行时最多使用1024MB)。export JAVA_OPTS="-Xms512m -Xmx1024m"
注意:-Xms与-Xmx的值建议设置为相同,避免堆内存动态扩展带来的性能损耗。
3. 区分Java版本设置元空间(替代永久代)
-XX:PermSize(初始大小)和-XX:MaxPermSize(最大大小),例如:export JAVA_OPTS="$JAVA_OPTS -XX:PermSize=64m -XX:MaxPermSize=128m"
-XX:MetaspaceSize(初始大小)和-XX:MaxMetaspaceSize(最大大小),例如:export JAVA_OPTS="$JAVA_OPTS -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
元空间使用本地内存,默认无大小限制,但建议设置上限以防止内存溢出。4. 优化垃圾回收(GC)参数
选择合适的垃圾回收器并调整其参数,可显著提升Tomcat性能:
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
export JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=200"
export JAVA_OPTS="$JAVA_OPTS -XX:+ParallelRefProcEnabled"
这些参数可减少Full GC频率,提升应用响应速度。5. 使用setenv.sh脚本(可选但推荐)
为避免直接修改catalina.sh,可在bin目录下创建setenv.sh文件(需赋予执行权限),将内存参数写入该文件。例如:
sudo touch /usr/share/tomcat9/bin/setenv.sh
sudo chmod +x /usr/share/tomcat9/bin/setenv.sh
编辑setenv.sh,添加:
#!/bin/bash
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m -XX:+UseG1GC"
setenv.sh会在Tomcat启动时自动加载,便于维护。
6. 通过环境变量全局设置(可选)
若需为所有用户或会话应用内存配置,可将JAVA_OPTS添加到系统环境变量文件(如/etc/environment)或用户级配置文件(如~/.bashrc)。例如:
echo 'export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m"' >> ~/.bashrc
source ~/.bashrc
这种方式无需修改Tomcat脚本,但需注意环境变量的作用域。
7. 验证配置生效
修改完成后,重启Tomcat服务使配置生效:
sudo systemctl restart tomcat9 # Debian 9+使用systemd
# 或
sudo service tomcat restart # 旧版本使用SysVinit
验证方法:
ps命令查看Tomcat进程的内存参数:ps aux | grep tomcat
输出中应包含-Xms、-Xmx等参数;/var/log/tomcat*/catalina.out),确认无内存参数错误。8. 监控与调优建议
top、htop、vmstat或jstat(如jstat -gc <pid>)实时监控Tomcat内存使用情况;OutOfMemoryError,需增大-Xmx或-XX:MaxMetaspaceSize;-Xmn,通常为-Xmx的1/3~1/2);-XX:MaxGCPauseMillis或更换垃圾回收器(如CMS,但需注意已逐渐被G1取代);