下面从 系统层面、JVM 层面、Tomcat 配置层面、连接与线程、静态资源、监控与压测 几个角度,系统性地说明 Tomcat 在 Debian 上的优化方法(以 Tomcat 9/10 为例,适用于生产环境)。
apt install openjdk-17-jdk
查看:
java -version
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
编辑(systemd 方式):
systemctl edit tomcat9
示例(4C8G 服务器):
[Service]
Environment="JAVA_OPTS=-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+HeapDumpOnOutOfMemoryError"
说明:
-Xms = -Xmx 避免动态扩容-Xlog:gc*:file=/var/log/tomcat9/gc.log:time,uptime:filecount=5,filesize=10M
配置文件:
/etc/tomcat9/server.xml
<Connector
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
maxThreads="400"
minSpareThreads="50"
acceptCount="1000"
maxConnections="10000"
connectionTimeout="20000"
keepAliveTimeout="15000"
maxKeepAliveRequests="100"
compression="on"
compressionMinSize="2048"
enableLookups="false"
/>
解释:
<!-- <Connector port="8009" protocol="AJP/1.3" /> -->
推荐架构:
Nginx -> Tomcat
Nginx 处理:
<Context cachingAllowed="true" cacheMaxSize="102400" />
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!-- AccessLogValve 如不需要可关闭或异步 -->
ps -ef | grep tomcat
Debian 默认 tomcat 用户 ✅
systemctl enable tomcat9
-Dcom.sun.management.jmxremote
ab -n 10000 -c 500 http://localhost:8080/
或:
4 核 8G:
如果你愿意,可以告诉我:
我可以给你一套 可直接用的 server.xml + JVM 参数。