优化 Debian 上的 Tomcat,一般可以从系统层、JVM 层、Tomcat 配置、应用层、运维监控几个方面入手。下面按实用优先级给你一份“可落地”的优化清单。
编辑 /etc/sysctl.conf(示例):
net.core.somaxconn = 4096
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
sysctl -p
Tomcat 高并发时需要大量 fd:
# /etc/security/limits.conf
tomcat soft nofile 65535
tomcat hard nofile 65535
不要用 root:
useradd -r -m -s /bin/bash tomcat
chown -R tomcat:tomcat /opt/tomcat
编辑 bin/setenv.sh(没有就新建):
export JAVA_OPTS="-Xms2g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
原则:Xms = Xmx,避免动态扩容
-XX:+UseG1GC
-XX:+UseG1GC
# 或 ZGC(低延迟)
-XX:+UseZGC
-Xlog:gc*:file=/var/log/tomcat/gc.log:time
<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"
/>
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- 可注释掉 AccessLogValve 如果由 Nginx 记录 -->
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9999
catalina.out 无限增长webapps/ROOT 默认页manager 公网访问如果你愿意,可以告诉我:
我可以直接帮你写一份针对性的 server.xml + JVM 参数配置。