最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linux中Tomcat怎样管理内存
时间:2026-07-22 17:37:01 编辑:袖梨 来源:一聚教程网
Linux下Tomcat内存管理实操指南

一 内存结构与关键参数
- 堆内存 Heap:存放对象实例,核心参数为**-Xms**(初始堆)与**-Xmx**(最大堆)。建议两者设为相同,避免运行期扩缩堆带来的抖动。常见做法是将堆设置为物理内存的50%–75%,需为操作系统和其他进程预留足够内存。
- 非堆内存 Non-Heap:存放类元数据等。Java 7及以前使用PermGen(参数**-XX:PermSize / -XX:MaxPermSize**);Java 8及以后使用Metaspace(参数**-XX:MetaspaceSize / -XX:MaxMetaspaceSize**,默认无上限,建议显式上限)。
- 线程栈:每个线程的栈空间由**-Xss控制,默认约512KB**,过大会放大内存占用。
- 新生代:可用**-Xmn或-XX:NewRatio / -XX:MaxNewSize控制,常见经验是新生代约为堆的1/4**,或堆的**50%–60%**分配给新生代(视应用对象生命周期而定)。
二 在Linux中设置JVM内存参数
- 修改脚本:编辑**$CATALINA_HOME/bin/catalina.sh**,在“echo “Using CATALINA_BASE: $CATALINA_BASE””之前添加JAVA_OPTS(或按需使用CATALINA_OPTS,仅作用于Tomcat启动)。
- 示例(Java 8,容器内存较充足):
JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Xss256k -verbose:gc -Xloggc:gc.log" - 示例(Java 7,使用PermGen):
JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m -Xss256k" - 注意:单位用m/g明确指定;不要把堆设得过大导致系统换页或OOM killer;仅在需要时设置**-Xss**,避免线程栈过大。
三 监控与常见OOM定位
- GC日志:开启**-verbose:gc -Xloggc:gc.log**,分析停顿时间与回收效果,配合可视化工具(如GCViewer)定位问题。
- JMX远程监控:在catalina.sh中加入
使用JConsole/VisualVM连接9090端口,实时查看堆/非堆、线程、类加载等指标。-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=9090-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false - 常见错误与处理:
- Java heap space:增大**-Xmx/-Xms**,优化对象生命周期与缓存;必要时配合合适的GC策略。
- PermGen space(Java 7):增大**-XX:MaxPermSize**;清理无用类加载与重复JAR。
- Metaspace(Java 8+):设置**-XX:MaxMetaspaceSize**,检查热部署/类加载泄漏。
- StackOverflowError:减小递归深度或适度增大**-Xss**。
四 垃圾回收器选择与调优要点
- 吞吐量优先(多核、批处理):-XX:+UseParallelGC。
- 低停顿优先(交互/低延迟):-XX:+UseG1GC(大堆更友好)。
- CMS(已废弃于新版本,仅旧版本考虑):-XX:+UseConcMarkSweepGC,常配合**-XX:+UseParNewGC**。
- 新生代调优:用**-Xmn或-XX:NewRatio / -XX:MaxNewSize**控制新生代大小;对象“朝生夕死”的应用可适当增大新生代,减少Full GC。
五 生产配置示例与注意事项
- 示例(4核8G,Java 8):
JAVA_OPTS="-server -Xms4096m -Xmx4096m -Xmn1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Xss256k -verbose:gc -Xloggc:gc.log" - 示例(2核4G,Java 8):
JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -Xss256k" - 注意事项:
- 堆上限通常设为物理内存的50%–75%,并预留1–2GB给系统与其他服务。
- -Xms 与 -Xmx 设为相同,减少堆动态扩缩带来的性能波动。
- 避免创建过多线程(受**-Xss与系统ulimit -u限制),必要时优化server.xml**线程池参数。
- 避免重复加载JAR(如将公共依赖放入tomcat/lib或合理配置类加载器),降低Metaspace/PermGen压力。
相关文章
- zk助手如何设置悬浮显示 zk助手设置悬浮显示方法 07-28
- 纸箱尺寸计算公式解读 07-28
- 纸箱的十种创意妙用 07-28
- 纸箱妙用手册 07-28
- 宝燕儿童乐园 游玩指南 07-28
- 淘特家电速查技巧 07-28