在 Debian 上调优 Tomcat 性能,通常可以从 系统层、JVM 层、Tomcat 配置层、应用层 四个维度来做。下面给你一份比较实用、可落地的调优清单。
Tomcat 高并发会耗尽 fd:
ulimit -n
建议:
# /etc/security/limits.conf
tomcat soft nofile 65535
tomcat hard nofile 65535
# /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
sysctl -p
不要用 root:
useradd -r -m -s /bin/bash tomcat
chown -R tomcat:tomcat /opt/tomcat
编辑:
/etc/default/tomcat9
# 或
/opt/tomcat/bin/setenv.sh
示例(8G 内存服务器):
JAVA_OPTS="-Xms4g -Xmx4g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
原则:
-Xms = -Xmx(避免动态扩容)-XX:+UseG1GC
-XX:+UseG1GC
# 或 ZGC(超低延迟)
-XX:+UseZGC
-Xloggc:/var/log/tomcat9/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
配置文件:
/opt/tomcat/conf/server.xml
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="500"
minSpareThreads="50"
acceptCount="1000"
maxConnections="10000"
connectionTimeout="20000"
enableLookups="false"
compression="on"
compressionMinSize="2048"
URIEncoding="UTF-8"
/>
说明:
maxThreads:并发处理线程acceptCount:等待队列enableLookups=false:避免 DNS 反向解析compression=on:开启 gzip<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
生产环境可注释掉。
<!-- <Connector port="8009" protocol="AJP/1.3" /> -->
Nginx -> Tomcat
Nginx 处理:
使用 HikariCP:
maximumPoolSize=20
minimumIdle=5
connectionTimeout=30000
jstack <pid>
jstat -gcutil <pid> 1000
ab -n 10000 -c 500 http://localhost:8080/
JAVA_OPTS="-Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxMetaspaceSize=512m"
Connector:
如果你愿意,可以告诉我:
我可以给你一份 精确配置模板。