温馨提示×

Ubuntu Tomcat内存如何配置

小樊
31
2025-12-26 19:26:11
栏目: 智能运维

Ubuntu 下 Tomcat 内存配置指南

一 配置位置与生效方式

  • 使用系统服务安装的 Tomcat(如 apt 安装的 Tomcat 7/8/9

    • 推荐在 /etc/default/tomcatX(X 为版本号)中设置 JAVA_OPTS,该文件会被服务启动脚本加载,升级时不易丢失。示例:
      • 编辑:sudo nano /etc/default/tomcat9
      • 添加:JAVA_OPTS=“-Xms512m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
      • 重启:sudo systemctl restart tomcat9
    • 说明:不要直接修改 /usr/share/tomcatX/bin/catalina.sh,以免升级覆盖;/etc/default/tomcatX 的设计目的就是用于覆盖服务脚本的默认变量。
  • 使用官方二进制包安装的 Tomcat(解压到 /opt/tomcat 等)

    • 推荐在 $CATALINA_HOME/bin/setenv.sh 中设置 CATALINA_OPTS(不存在则创建),仅对 Tomcat 生效,避免污染全局环境。示例:
      • 新建:sudo nano /opt/tomcat/bin/setenv.sh
      • 内容:export CATALINA_OPTS=“-Xms1g -Xmx1g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
      • 赋权:chmod +x /opt/tomcat/bin/setenv.sh
      • 重启:sudo systemctl restart tomcat(若已配置为 systemd 服务)
    • 说明:官方二进制包没有 /etc/default/tomcatX,修改 catalina.sh 可行但不如 setenv.sh 清晰与可维护。

二 关键 JVM 参数与建议值

  • 堆内存:设置 -Xms(初始堆)与 -Xmx(最大堆),建议两者等值,避免运行期扩容带来停顿;通常不超过系统总内存的 50%,并预留给系统与其他进程。示例:-Xms2g -Xmx2g
  • 元空间(Java 8+):使用 -XX:MetaspaceSize-XX:MaxMetaspaceSize,避免默认无限制增长,常见取值 256m–512m。示例:-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
  • 年轻代:可用 -Xmn 直接设定年轻代大小,或用 -XX:NewRatio 调整代际比例。示例:-Xmn512m-XX:NewRatio=2(年轻代:老年代≈1:2)。
  • GC 日志(排障与容量规划):建议开启
    • 示例:-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/opt/tomcat/logs/gc.log
  • 线程与连接器(与内存协同):在 conf/server.xml 的 Connector 中结合并发调整
    • 示例:maxThreads(默认 200)、acceptCount(默认 100);可按并发量适当上调,如 maxThreads=500acceptCount=300

三 不同内存规格的参考配置

物理内存 建议堆(-Xms/-Xmx) 元空间 年轻代 说明
2 GB -Xms1g -Xmx1g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -Xmn512m-XX:NewRatio=2 预留约 1 GB 给系统与文件缓存
4 GB -Xms2g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -Xmn768m-XX:NewRatio=2 并发较高可适当上调 maxThreads
8 GB -Xms4g -Xmx4g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -Xmn2g-XX:NewRatio=2 结合 GC 日志与监控微调
说明:上表为通用起点,需结合实际负载与 GC 表现迭代优化。

四 验证与常用命令

  • 查看进程与参数:ps -ef | grep tomcat;jps -v(查看是否包含 -Xms/-Xmx/-XX:MetaspaceSize 等)
  • 堆与代际分布:jmap -heap <java_pid>
  • GC 统计与停顿:jstat -gcutil <java_pid> 1000 30
  • 实时内存与 CPU:top / htop(观察 RES、%CPU)
  • 日志:tail -f /opt/tomcat/logs/catalina.outgc.log
  • 注意:修改内存参数后必须重启 Tomcat 才能生效。

0