ubuntu

Ubuntu Tomcat性能如何优化

小樊
42
2025-11-01 03:08:01
栏目: 智能运维

Ubuntu下Tomcat性能优化策略

1. Tomcat自身配置优化

连接器(Connector)配置

选择高性能连接器(如NIO或NIO2)并启用HTTP/2,提升高并发下的吞吐量。在server.xml中配置:

<Connector 
    port="8080" 
    protocol="org.apache.coyote.http11.Http11Nio2Protocol"  <!-- 使用NIO2连接器 -->
    connectionTimeout="20000" 
    redirectPort="8443"
    maxThreads="300"        <!-- 最大线程数(根据CPU核心数调整,建议200-500) -->
    minSpareThreads="50"    <!-- 最小空闲线程数(保持线程预热) -->
    acceptCount="1000"      <!-- 最大排队请求数(避免拒绝服务) -->
    enableLookups="false"   <!-- 禁用DNS反查(减少网络请求) -->
    compression="on"        <!-- 启用GZIP压缩(减少传输数据量) -->
    compressableMimeType="text/html,text/xml,text/javascript,application/json" />

若需启用HTTP/2(Tomcat 8.5+),需添加SSL配置并指定Http2Protocol

线程池优化

通过Executor定义全局线程池,避免每个连接器重复创建线程。在server.xml中配置:

<Executor 
    name="tomcatThreadPool" 
    namePrefix="catalina-exec-" 
    maxThreads="500"        <!-- 最大线程数 -->
    minSpareThreads="100"   <!-- 最小空闲线程数 -->
    maxQueueSize="100"      <!-- 队列最大长度(避免内存溢出)" />
<Connector executor="tomcatThreadPool" ... />

2. JVM调优

内存参数配置

合理分配堆内存(避免频繁GC),并根据应用类型调整新生代与老年代比例。在catalina.sh中设置:

export JAVA_OPTS="-server -Xms2g -Xmx2g -XX:NewRatio=3 -XX:MaxMetaspaceSize=512m"

垃圾回收器选择

优先使用G1GC(适合大内存、低延迟场景),替代传统的CMS或Parallel GC:

export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

3. Linux内核优化

网络参数调整

优化TCP缓冲区与连接队列,提升网络吞吐量。执行以下命令:

# 增加TCP缓冲区大小(单位:字节)
sudo sysctl -w net.core.rmem_max=1310720
sudo sysctl -w net.core.wmem_max=1310720
# 启用TCP快速回收(减少TIME_WAIT状态连接)
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
# 减少SYN队列超时时间(避免半连接攻击)
sudo sysctl -w net.ipv4.tcp_synack_retries=2
# 增加系统最大文件描述符数
sudo sysctl -w net.core.somaxconn=4096

将上述配置添加到/etc/sysctl.conf以实现永久生效。

文件描述符限制

调整用户进程与文件描述符的最大数量,避免高并发下出现“Too many open files”错误。编辑/etc/security/limits.conf

* soft nofile 65535
* hard nofile 65535

修改后执行source /etc/security/limits.conf使配置生效。

4. 应用层面优化

静态资源分离

将图片、CSS、JavaScript等静态资源部署到Nginx或CDN,减少Tomcat的处理负担。Nginx配置示例:

server {
    listen 80;
    server_name example.com;
    location /static/ {
        alias /var/www/static/;  # 静态资源目录
        expires 30d;             # 设置缓存过期时间
    }
    location / {
        proxy_pass http://tomcat:8080;  # 反向代理到Tomcat
        proxy_set_header Host $host;
    }
}

数据库连接池优化

使用高效的数据库连接池(如HikariCP),减少连接创建与销毁的开销。在Spring Boot中配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: 123456
    hikari:
      maximum-pool-size: 20     # 连接池最大连接数
      minimum-idle: 5           # 最小空闲连接数
      idle-timeout: 30000       # 空闲连接超时时间(毫秒)
      connection-timeout: 3000  # 连接超时时间(毫秒)

代码优化

5. 监控与调优工具

0
看了该问题的人还看了