优化 Debian 上的 Tomcat 通常从 系统资源、JVM、Tomcat 配置、应用层、监控 几个方面入手。下面给你一套实用且可落地的优化方案(适用于 Debian 10/11/12,Tomcat 8.5/9/10)。
编辑 /etc/sysctl.conf:
# 增加文件描述符
fs.file-max = 2097152
# TCP 优化
net.core.somaxconn = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_syn_backlog = 8192
生效:
sysctl -p
编辑 /etc/security/limits.conf:
tomcat soft nofile 65535
tomcat hard nofile 65535
(如果用 root 启动,也要配置 root)
useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat
chown -R tomcat:tomcat /opt/tomcat
Debian 下通常是:
/etc/default/tomcat9
或者:
/opt/tomcat/bin/setenv.sh
推荐配置(示例,8G 内存服务器):
JAVA_OPTS="-server
-Xms4g
-Xmx4g
-Xmn2g
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
-XX:+UseG1GC
-XX:+DisableExplicitGC
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/tomcat9/
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/var/log/tomcat9/gc.log"
| 内存 | GC |
|---|---|
| ≤ 4G | Parallel GC |
| ≥ 4G | G1 GC(推荐) |
路径:
/etc/tomcat9/server.xml
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="500"
minSpareThreads="50"
acceptCount="100"
connectionTimeout="20000"
enableLookups="false"
maxConnections="8192"
compression="on"
compressibleMimeType="text/html,text/xml,text/css,text/javascript,application/json" />
<Connector protocol="AJP/1.3"
port="8009"
secret="your-secret"
maxThreads="500" />
⚠️ Tomcat 10 默认禁用 AJP,需手动开启
<Host name="localhost" appBase="webapps"
unpackWARs="false"
autoDeploy="false">
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="800"
minSpareThreads="100" />
<Connector executor="tomcatThreadPool"
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol" />
<session-config>
<session-timeout>1</session-timeout>
</session-config>
或直接不创建 Session。
✅ 推荐架构
Nginx → Tomcat
Nginx 处理:
减少控制台输出:
.handlers = 1catalina.org.apache.juli.AsyncFileHandler
1catalina.org.apache.juli.AsyncFileHandler.bufferSize = 8192
vim /opt/tomcat/conf/server.xml
<Server port="8005" shutdown="STOP">
并移除默认应用:
rm -rf /opt/tomcat/webapps/*
CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9090 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false"
apt install apache2-utils
ab -n 10000 -c 200 http://localhost:8080/
✅ Debian + Nginx + Tomcat + G1 GC
| 问题 | 原因 |
|---|---|
| CPU 飙高 | GC 频繁 / 死循环 |
| 内存溢出 | 堆太小 / 内存泄漏 |
| 请求慢 | 线程数不足 |
| 启动慢 | 扫描过多 JAR |
如果你愿意,可以告诉我:
我可以 直接给你一套定制化的 server.xml + JVM 参数。