Tomcat在Linux上的内存设置方法及建议
Tomcat在Linux系统中的内存配置需通过修改**catalina.sh**(位于$CATALINA_HOME/bin目录)文件实现,具体步骤如下:
vi)打开catalina.sh:sudo vi /path/to/tomcat/bin/catalina.sh
cygwin=false语句上方,添加JAVA_OPTS参数(若已有JAVA_OPTS,则直接修改):export JAVA_OPTS="-Xms512m -Xmx1024m -Xss256k -XX:PermSize=128m -XX:MaxPermSize=256m"
sudo systemctl restart tomcat # 或使用 sudo service tomcat restart(取决于系统版本)
-Xms:JVM初始堆内存大小(如-Xms512m表示初始分配512MB)。建议与-Xmx设置为相同值,避免堆内存频繁扩容导致的性能波动。-Xmx:JVM最大堆内存大小(如-Xmx1024m表示最大允许使用1024MB)。严禁超过物理内存(如服务器有8GB物理内存,建议-Xmx设置为6-7GB)。-Xss:每个线程的堆栈大小(如-Xss256k表示每个线程分配256KB)。默认值为1MB(JDK 8及以上),可根据应用线程数量调整(线程数越多,-Xss越小)。-XX:PermSize/-XX:MaxPermSize:永久代(Method Area)初始大小和最大值(如-XX:PermSize=128m、-XX:MaxPermSize=256m)。用于存储类元数据、常量池等,JDK 8及以上已替换为-XX:MetaspaceSize/-XX:MaxMetaspaceSize(默认无限制,但建议设置上限)。-XX:NewRatio:新生代与老年代的比例(如-XX:NewRatio=3表示新生代占堆的1/4,老年代占3/4)。适用于需要频繁创建对象的场景。-XX:SurvivorRatio:Eden区与Survivor区的比例(如-XX:SurvivorRatio=8表示Eden区占新生代的8/10,每个Survivor区占1/10)。调整可优化Minor GC效率。JAVA_OPTS="-Xms512m -Xmx1024m -Xss256k -XX:PermSize=128m -XX:MaxPermSize=256m"
JAVA_OPTS="-server -Xms2048m -Xmx4096m -Xss512k -XX:NewRatio=3 -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:MaxMetaspaceSize=512m"
说明:-server启用JDK的Server模式(多CPU性能更优);-XX:+UseConcMarkSweepGC启用并发标记清除垃圾收集器(减少Full GC停顿时间);-XX:MaxMetaspaceSize限制元空间大小(避免内存泄漏)。-Xmx不可超过服务器物理内存(如8GB内存建议-Xmx设置为6-7GB,预留1-2GB给系统和其他进程)。-Xmx最大支持约2GB(受JVM地址空间限制)。ps aux | grep tomcat # 查找Tomcat进程,检查JAVA_OPTS参数
或通过Tomcat Manager页面(需提前配置)查看内存使用情况。-XX:+UseG1GC适用于大堆内存,-XX:+UseParallelGC适用于吞吐量优先场景)。-XX:MaxMetaspaceSize建议设置为物理内存的1/4(如8GB内存设置为2GB),避免元空间溢出。-Xss(如-Xss128k),但需确保不会导致StackOverflowError。