Debian上Tomcat内存优化实操指南
一 基线评估与容量规划
二 配置JVM内存与垃圾回收
#!/usr/bin/env bash
export JAVA_OPTS="$JAVA_OPTS -server"
export CATALINA_OPTS="$CATALINA_OPTS \
-Xms2g -Xmx2g \
-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/logs/heap.hprof \
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/opt/tomcat/logs/gc.log"
# /etc/systemd/system/tomcat.service 片段
[Service]
Environment="CATALINA_OPTS=-Xms2g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"
ps -ef | grep tomcat | grep -E 'Xms|Xmx|UseG1GC|Metaspace'jstat -gc <pid>、jmap -heap <pid>、查看 gc.log 与 heap.hprof。三 Tomcat容器与线程模型优化
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
minSpareThreads="25"
maxConnections="10000"
acceptCount="100"
compression="on" />
四 操作系统与容器层面的资源隔离
# /etc/systemd/system/tomcat.service
[Service]
MemoryMax=4G
MemoryHigh=3.5G
变更后执行:systemctl daemon-reload && systemctl restart tomcat。sudo apt-get install -y cgroup-tools
sudo cgcreate -g cpu,memory:/tomcat
echo "1073741824" | sudo tee /sys/fs/cgroup/memory/tomcat/memory.limit_in_bytes # 1GB
echo "<PID>" | sudo tee /sys/fs/cgroup/memory/tomcat/tasks
五 监控 排错与迭代流程
jstat -gc <pid>、jmap -heap <pid>、jstack <pid> 观察堆、GC、线程与锁竞争。