温馨提示×

如何调优debian tomcat性能

小樊
49
2026-09-12 09:29:33
栏目: 智能运维

在 Debian 上调优 Tomcat 性能,通常可以从 系统层、JVM 层、Tomcat 配置层、应用层 四个维度来做。下面给你一份比较实用、可落地的调优清单。


一、系统层(Debian / Linux)

1. 文件描述符限制

Tomcat 高并发会耗尽 fd:

ulimit -n

建议:

# /etc/security/limits.conf
tomcat soft nofile 65535
tomcat hard nofile 65535

2. 内核参数(高并发)

# /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
sysctl -p

3. 使用独立用户运行 Tomcat

不要用 root:

useradd -r -m -s /bin/bash tomcat
chown -R tomcat:tomcat /opt/tomcat

二、JVM 层(最重要)

1. 设置堆内存

编辑:

/etc/default/tomcat9
# 或
/opt/tomcat/bin/setenv.sh

示例(8G 内存服务器):

JAVA_OPTS="-Xms4g -Xmx4g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"

原则:

  • -Xms = -Xmx(避免动态扩容)
  • 留 20~30% 内存给系统

2. 垃圾回收器选择

JDK 8

-XX:+UseG1GC

JDK 11+

-XX:+UseG1GC
# 或 ZGC(超低延迟)
-XX:+UseZGC

3. GC 日志(排查用)

-Xloggc:/var/log/tomcat9/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps

三、Tomcat 配置层

配置文件:

/opt/tomcat/conf/server.xml

1. Connector 调优(关键)

NIO(默认推荐)

<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

2. 关闭 unnecessary 功能

<Listener className="org.apache.catalina.startup.VersionLoggerListener" />

生产环境可注释掉。

3. 关闭 AJP(不用就关)

<!-- <Connector port="8009" protocol="AJP/1.3" /> -->

四、应用 & 架构层

1. 静态资源交给 Nginx

Nginx -> Tomcat

Nginx 处理:

  • 图片
  • JS/CSS
  • 静态页面

2. Session 优化

  • 无状态应用(JWT)
  • 或用 Redis 存 Session

3. 数据库连接池

使用 HikariCP:

maximumPoolSize=20
minimumIdle=5
connectionTimeout=30000

五、监控 & 验证

1. 查看线程

jstack <pid>

2. 查看 JVM

jstat -gcutil <pid> 1000

3. 压测

ab -n 10000 -c 500 http://localhost:8080/

六、简单推荐配置(8G 服务器示例)

JAVA_OPTS="-Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxMetaspaceSize=512m"

Connector:

  • maxThreads = 400~600
  • acceptCount = 1000

如果你愿意,可以告诉我:

  • Debian 版本
  • Tomcat 版本
  • JDK 版本
  • 并发量级别

我可以给你一份 精确配置模板

0