在 Debian 上优化 Tomcat,通常可以从系统层面、JVM 层面、Tomcat 配置、应用层面和安全/运维几个方面来做。下面给你一份比较实用、可落地的优化清单(以 Debian + Tomcat 9/10 为例)。
编辑 /etc/sysctl.conf 或 /etc/sysctl.d/99-tomcat.conf:
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
vm.swappiness = 10
应用:
sysctl -p
Tomcat 高并发需要更多 fd:
# /etc/security/limits.conf
tomcat soft nofile 65535
tomcat hard nofile 65535
如果是 systemd 启动:
# /etc/systemd/system/tomcat.service.d/limits.conf
[Service]
LimitNOFILE=65535
编辑 Tomcat 的 JVM 参数(Debian 通常如下):
# /etc/default/tomcat9 或 /etc/systemd/system/tomcat.service
JAVA_OPTS="-Xms2g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
原则:
-Xms = -Xmx(避免动态扩容)Tomcat 9 + JDK 8:
-XX:+UseG1GC
JDK 11+:
-XX:+UseG1GC
# 或 ZGC(低延迟)
-XX:+UseZGC
示例:
JAVA_OPTS="-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
-server
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/tomcat9/heapdump.hprof
编辑 conf/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"
compressibleMimeType="text/html,text/xml,text/css,application/javascript"
/>
说明:
enableLookups=false(关闭 DNS 反查)compression=on(启用压缩)maxThreads 按 CPU 核数和业务调整<!-- 注释掉 -->
<!-- <Connector port="8009" protocol="AJP/1.3" ... /> -->
conf/server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false">
conf/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<Context>
<Resources cachingAllowed="true" cacheMaxSize="102400" />
</Context>
Debian 默认已使用 tomcat 用户,确认:
ps -ef | grep tomcat
rm -rf /var/lib/tomcat9/webapps/ROOT
rm -rf /var/lib/tomcat9/webapps/docs
rm -rf /var/lib/tomcat9/webapps/examples
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
conf/logging.properties
logrotate# CPU / 内存
top / htop
# 端口连接
ss -ant | wc -l
# GC 情况
jstat -gcutil <pid> 1000
如果你愿意,可以告诉我:
我可以直接帮你给出可复制的配置文件。