在 Debian 上优化 Tomcat 性能,通常从 系统层面、JVM 层面、Tomcat 配置层面、应用层面 四个方向入手。下面给你一套实用、可落地的优化清单(以 Debian + Tomcat 9/10 为例,其他版本类似)。
Tomcat 高并发时需要大量 fd。
# 查看
ulimit -n
# 修改(永久)
sudo vim /etc/security/limits.conf
添加:
* soft nofile 65535
* hard nofile 65565535
并确保在 /etc/pam.d/common-session 中有:
session required pam_limits.so
sudo vim /etc/sysctl.conf
常见优化:
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600
生效:
sudo sysctl -p
编辑:
sudo vim /etc/default/tomcat9
(或 tomcat10,取决于版本)
示例(8G 内存机器):
JAVA_OPTS="-Xms4g -Xmx4g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
✅ 建议:
-Xms = -Xmx(避免动态扩容)JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
高版本 JDK(17+):
-XX:+UseZGC
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat9/"
sudo vim /etc/tomcat9/server.xml
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="500"
minSpareThreads="50"
acceptCount="1000"
maxConnections="10000"
connectionTimeout="20000"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/css,application/javascript"
/>
说明:
enableLookups=false → 禁用 DNS 解析compression=on → 开启 gzipmaxThreads 按 CPU 和场景调整(一般 200–800)<!-- <Connector port="8009" protocol="AJP/1.3" /> -->
context.xml 或 server.xml 中:
<Valve className="org.apache.catalina.valves.AccessLogValve" />
高并发可改为异步或关闭。
推荐架构:
Nginx -> Tomcat
Nginx 处理:
Tomcat 只做动态请求。
Nginx 示例:
location ~* \.(js|css|png|jpg|gif)$ {
expires 30d;
}
sudo systemctl status tomcat9
journalctl -u tomcat9
sudo vim /etc/tomcat9/tomcat-users.xml
ab -n 10000 -c 500 http://localhost:8080/
wrk -t8 -c500 -d30s http://localhost:8080/
✅ Debian 12
✅ Tomcat 10 + JDK 17
✅ NIO2 + G1
✅ Nginx 反向代理
✅ 4–8G JVM 堆
如果你愿意,可以告诉我:
我可以帮你 直接给出一份可复制的配置文件。