首页主机资讯Ubuntu Tomcat内存如何分配

Ubuntu Tomcat内存如何分配

时间2025-12-01 11:50:04发布访客分类主机资讯浏览743
导读:Ubuntu 下 Tomcat 内存分配指南 一 配置位置与优先级 推荐在 $CATALINA_BASE/bin/setenv.sh(若不存在则新建)中设置内存参数,文件会被 catalina.sh 自动加载,便于维护与升级。也可直接在...

Ubuntu 下 Tomcat 内存分配指南

一 配置位置与优先级

  • 推荐在 $CATALINA_BASE/bin/setenv.sh(若不存在则新建)中设置内存参数,文件会被 catalina.sh 自动加载,便于维护与升级。也可直接在 catalina.sh 中设置,但不建议。使用包管理器安装的 Tomcat 6/7 还可在 /etc/default/tomcat6/etc/default/tomcat7 中设置 JAVA_OPTS。变量方面:仅用于 Tomcat 启动/停止的 JVM 参数用 CATALINA_OPTS;希望被所有调用(含停止脚本)继承时用 JAVA_OPTS。示例:
    • 新建或编辑:sudo vim $CATALINA_BASE/bin/setenv.sh
    • 内容示例:
      #!/bin/bash
      export CATALINA_OPTS="$CATALINA_OPTS -Xms2g -Xmx2g -XX:+UseG1GC"
      
    • 赋权并重启:
      chmod +x $CATALINA_BASE/bin/setenv.sh
      sudo systemctl restart tomcat9  # 版本号可能不同
      
    以上做法与变量差异说明见官方脚本加载逻辑与社区实践。

二 关键 JVM 参数与建议值

  • 堆内存:用 -Xms(初始堆)与 -Xmx(最大堆)控制,建议两者设为相同以减少堆扩展带来的抖动;通常将 -Xms/-Xmx 设为机器物理内存的约一半,并留出内存给操作系统、元空间、容器与缓存。
  • 年轻代:用 -Xmn 直接设定,或用 -XX:NewRatio-XX:NewSize/-XX:MaxNewSize 调整;当堆较大(如 > 1GB)时,可将年轻代设为堆的**约 50%–60%**以降低 Full GC 频率。
  • 非堆内存:
    • Java 8 及更早:使用 -XX:PermSize-XX:MaxPermSize 配置“永久代”。
    • Java 8 之后:使用 -XX:MetaspaceSize-XX:MaxMetaspaceSize 配置“元空间”(无上限易致容器 OOM,建议显式上限)。
  • 线程栈:用 -Xss 设置每个线程栈大小,默认值依平台/版本而异,通常无需修改,除非遇到 StackOverflowError 或线程数极大场景。
  • 垃圾回收:
    • Java 8 常用并行/CMS(如 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC)。
    • Java 8 及以后更推荐 G1GC(如 -XX:+UseG1GC),在吞吐与停顿间更均衡。
      以上参数含义、适用场景与默认值说明可参考参数释义与社区示例。

三 快速示例

  • Java 8(示例为 4GB 内存机器,给堆约 2GB,年轻代约 1GB,永久代 256MB,启用 GC 日志与 OOM 堆转储)
    #!/bin/bash
    export CATALINA_OPTS="$CATALINA_OPTS \
      -server \
      -Xms2g -Xmx2g \
      -Xmn1g \
      -XX:PermSize=256m -XX:MaxPermSize=256m \
      -XX:+UseG1GC \
      -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$CATALINA_BASE/logs/gc.log \
      -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_BASE/logs/heap.hprof"
    
  • Java 11+(示例为 8GB 内存机器,给堆约 4GB,元空间上限 512MB,G1GC)
    #!/bin/bash
    export CATALINA_OPTS="$CATALINA_OPTS \
      -server \
      -Xms4g -Xmx4g \
      -Xmn2g \
      -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m \
      -XX:+UseG1GC \
      -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$CATALINA_BASE/logs/gc.log \
      -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_BASE/logs/heap.hprof"
    
    上述示例体现了常见的堆/年轻代配比、GC 选择与日志/堆转储开关,便于问题排查与容量规划。

四 验证与常见注意

  • 验证是否生效:
    • 查看启动日志中打印的命令行参数(如 -Xms/-Xmx 等),或使用 jps -v 查看对应 java 进程的 JVM 参数。
    • 运行时可用 jstat -gc 观察 GC 与内存使用;发生 OOM 时检查是否生成了 HeapDump 文件。
  • 常见注意:
    • 32 位 JVM 的地址空间受限(通常仅能用到约 2GB–3GB 的堆),生产建议使用 64 位 JVM 与足够的物理内存。
    • 容器/虚拟化环境需为操作系统、元空间、Direct Memory、线程栈等预留内存,避免将 -Xmx 设为接近物理内存上限。
    • 包管理版 Tomcat 可在 /etc/default/tomcatX 设置 JAVA_OPTS;但更推荐在 setenv.sh 中使用 CATALINA_OPTS 以便与脚本解耦。
      以上验证与注意事项有助于快速定位配置是否生效及避免常见配置陷阱。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Tomcat内存如何分配
本文地址: https://pptw.com/jishu/759942.html
Linux CPUInfo 硬件信息 Debian Python远程调试如何进行

游客 回复需填写必要信息