优化 Debian 上的 Tomcat 通常从 系统、JVM、Tomcat 配置、应用、监控 五个方面入手。下面给你一套实战型优化清单(适用于 Tomcat 8/9/10,Debian 10/11/12)。
编辑 /etc/sysctl.conf:
# 提高网络连接能力
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
# 减少 TIME_WAIT
net.ipv4.tcp_tw_reuse = 1
# 文件描述符
fs.file-max = 1000000
生效:
sysctl -p
编辑 /etc/security/limits.conf:
tomcat soft nofile 65536
tomcat hard nofile 65536
确认 Tomcat 用户:
ps -ef | grep tomcat
编辑(取决于安装方式):
/etc/default/tomcat9
# 或
/usr/share/tomcat9/bin/setenv.sh
示例(生产环境 4C8G):
JAVA_OPTS="-server
-Xms2g
-Xmx2g
-Xmn512m
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
-XX:+UseG1GC
-XX:+DisableExplicitGC
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/tomcat9/heapdump.hprof
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/var/log/tomcat9/gc.log"
✅ 原则:
server.xml路径:
/etc/tomcat9/server.xml
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="400"
minSpareThreads="50"
acceptCount="200"
maxConnections="8192"
connectionTimeout="20000"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/css,application/javascript,application/json"
URIEncoding="UTF-8"/>
✅ 建议:
maxThreads<!-- 注释掉 -->
<!-- <Connector port="8009" protocol="AJP/1.3" /> -->
server.xml:
<Host name="localhost" appBase="webapps"
unpackWARs="false"
autoDeploy="false">
context.xml:
<Context reloadable="false"/>
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
✅ 好处:
logging.properties:
.level = WARNING
或用 Log4j2 / Logback 替代 JULI。
JAVA_OPTS="$JAVA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9090
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false"
jps -l
jstat -gc pid
top -H -p pid
ss -antp | grep java
| 安装方式 | 配置位置 |
|---|---|
| apt 安装 | /etc/tomcat9/ |
| 官方 tar.gz | tomcat/bin/setenv.sh |
✅ 4C8G 服务器
如果你愿意,可以告诉我:
我可以 直接给你一套定制配置。