在 Debian 上运行 Tomcat(通常是 tomcat9 / tomcat10)时,调优主要围绕 JVM、Tomcat 配置、系统参数、应用层面 四个方面。下面按实战角度给你一套常见调优方案。
Debian 下 Tomcat 的 JVM 参数通常在:
/etc/default/tomcat9
或(systemd):
/etc/systemd/system/tomcat9.service.d/override.conf
示例(4C8G 服务器):
JAVA_OPTS="-server \
-Xms2g -Xmx2g \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/var/log/tomcat9/heapdump.hprof"
要点:
-Xms = -Xmx,避免动态扩容路径:
/etc/tomcat9/server.xml
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="400"
minSpareThreads="50"
acceptCount="200"
maxConnections="10000"
connectionTimeout="20000"
keepAliveTimeout="15000"
maxKeepAliveRequests="100"
compression="on"
compressableMimeType="text/html,text/xml,text/plain,application/json"
enableLookups="false"
disableUploadTimeout="true"/>
说明:
Nio2 比 BIO 性能更好maxThreads 根据 CPU 核数调整<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="50"
maxIdleTime="60000"/>
Connector 引用:
<Connector executor="tomcatThreadPool" ... />
Tomcat 用户(通常是 tomcat):
vim /etc/security/limits.conf
tomcat soft nofile 65535
tomcat hard nofile 65535
systemd 下还要加:
vim /etc/systemd/system/tomcat9.service.d/override.conf
[Service]
LimitNOFILE=65535
然后:
systemctl daemon-reload
systemctl restart tomcat9
vim /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
sysctl -p
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b"
buffered="true"/>
高并发时可:
jstat -gcutiljvisualvmab / wrk / jmeter| 配置 | 值 |
|---|---|
| CPU | 4 核 |
| 内存 | 8G |
| Xmx | 4G |
| maxThreads | 400 |
| GC | G1 |
| 反向代理 | Nginx |
如果你愿意,可以告诉我:
我可以给你一份可直接用的配置文件。