Ubuntu 下 Tomcat 内存设置指南
一 推荐做法 使用 setenv.sh 设置内存参数
- 在 $CATALINA_HOME/bin/ 目录下创建或编辑文件 setenv.sh(若已存在则直接修改),加入需要的内存参数。示例(请按机器内存与业务需求调整数值):
#!/bin/sh
export JAVA_OPTS="$JAVA_OPTS -Xms2g -Xmx2g"
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
export JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=200"
export JAVA_OPTS="$JAVA_OPTS -Xlog:gc*,gc+heap=debug:file=/opt/tomcat/logs/gc.log:time,tags"
- 说明:
- 使用 -Xms 与 -Xmx 设置堆的初始与最大值,建议两者等值(如 2g),避免运行期扩缩堆带来的抖动。
- 现代 JDK(8u191+ / 11+)默认使用 G1GC,可按需添加 -XX:+UseG1GC 与 -XX:MaxGCPauseMillis 等调优参数。
- 通过 -Xlog:gc… 输出结构化 GC 日志,便于排查与容量规划。
- 使配置生效:
- 重启 Tomcat:执行 $CATALINA_HOME/bin/shutdown.sh 后再执行 $CATALINA_HOME/bin/startup.sh。
- 验证是否生效:执行 $CATALINA_HOME/bin/catalina.sh run,在启动日志中能看到形如 Command line argument: -Xms2g -Xmx2g 的参数回显。
二 其他可行位置与注意事项
- 直接编辑 $CATALINA_HOME/bin/catalina.sh,在文件靠前位置加入 JAVA_OPTS 配置(不推荐,升级时易被覆盖)。
- 部分系统(如 Tomcat 6 的某些发行包)会在 /etc/default/tomcat6 中提供 JAVA_OPTS 配置项,可直接在该文件里设置并重启服务。
- 避免与系统服务管理器(如 systemd)的环境变量冲突:若通过服务启动,优先在 setenv.sh 或服务的 Environment= 中设置,保持单一来源。
三 不同 JDK 版本的元空间与参数差异
- JDK 8 及更早:使用永久代(PermGen),常见参数如 -XX:PermSize 与 -XX:MaxPermSize(示例:-XX:PermSize=256m -XX:MaxPermSize=256m)。
- JDK 11+:永久代已移除,使用元空间(Metaspace),应改用 -XX:MetaspaceSize 与 -XX:MaxMetaspaceSize(示例:-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m)。
- 若不确定 JDK 版本,可先执行 java -version 确认,再选择对应参数集。
四 系统层面优化与验证
- 文件句柄与进程数限制:编辑 /etc/security/limits.conf,提升 nofile 与 nproc(示例:soft nofile 65535、hard nofile 65536),并重启或重新登录使其生效;随后可用 ulimit -n 验证。
- 启动方式建议:不要用 start.sh 后台启动进行验证,改用 ./catalina.sh run 前台运行,便于在控制台直接看到 -Xms/-Xmx 等参数是否生效。