在 Debian 上优化 Tomcat,一般从系统层、JVM 层、Tomcat 配置层、应用层四个维度来做。下面给你一套实用、可落地的优化清单(以 Tomcat 9/10 为例,Debian 11/12 通用)。
Tomcat 高并发时需要大量 fd。
# 查看当前限制
ulimit -n
# 修改系统限制
vim /etc/security/limits.conf
添加:
* soft nofile 65535
* hard nofile 65535
并在 /etc/systemd/system/tomcat.service 或 /etc/default/tomcat9 中确认:
LimitNOFILE=65535
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
sysctl -p
不要用 startup.sh 手动跑,用 systemd:
systemctl edit tomcat9
可加:
[Service]
LimitNOFILE=65535
编辑:
/etc/default/tomcat9
或
CATALINA_OPTS="-Xms2g -Xmx2g"
建议:
-Xms1g -Xmx1g-Xms4g -Xmx4g-XX:+UseG1GC
-XX:+UseG1GC
# 或 ZGC(超低延迟)
-XX:+UseZGC
示例:
JAVA_OPTS="-Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/tomcat9/heapdump.hprof
编辑:
/etc/tomcat9/server.xml
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="500"
minSpareThreads="50"
acceptCount="1000"
maxConnections="10000"
connectionTimeout="20000"
keepAliveTimeout="30000"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/css,application/javascript"
/>
说明:
maxThreads:并发处理线程acceptCount:排队数enableLookups=false:关闭 DNS 反查(提升性能)compression=on:开启 gzip<!-- 注释掉 -->
<!-- <Connector port="8009" protocol="AJP/1.3" /> -->
<Context cachingAllowed="true" cacheMaxSize="10240" />
export CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true"
<Host name="localhost" autoDeploy="false" deployOnStartup="false">
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
jstat -gcutiljmapCATALINA_OPTS="-Xms4g -Xmx4g -XX:+UseG1GC -Djava.awt.headless=true"
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="500"
acceptCount="1000"
enableLookups="false"
compression="on" />
如果你愿意,可以告诉我:
我可以直接给你一份可直接用的配置。