centos

CentOS Tomcat性能调优策略

小樊
45
2025-10-13 04:40:14
栏目: 智能运维

CentOS下Tomcat性能调优策略

1. 操作系统层优化

1.1 调整文件描述符限制

CentOS默认文件描述符限制(nofile)过低,会限制Tomcat并发连接数。编辑/etc/security/limits.conf,添加以下内容:
* soft nofile 65536(软限制)、* hard nofile 65536(硬限制),保存后重新登录生效。

1.2 优化内核参数

修改/etc/sysctl.conf,提升网络并发处理能力:

net.core.somaxconn = 65535  # 监听队列最大长度(需>=Tomcat的acceptCount)
net.ipv4.tcp_tw_reuse = 1   # 允许复用TIME_WAIT状态的连接
net.ipv4.tcp_max_syn_backlog = 65535  # SYN队列最大长度
net.ipv4.ip_local_port_range = 1024 65535  # 本地端口范围(扩大可用端口数)

执行sysctl -p使配置生效。

1.3 禁用透明大页(Transparent Huge Pages)

透明大页会导致内存碎片,降低Tomcat性能。编辑/etc/rc.local,添加以下命令(开机自动执行):

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

2. Tomcat配置优化

2.1 线程池调优

通过server.xml中的<Executor><Connector>配置线程池,合理分配线程资源:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
          maxThreads="500"    <!-- 最大线程数根据CPU核心数调整如4核可设200-500-->
          minSpareThreads="50" <!-- 最小空闲线程数(保持备用线程,应对突发请求) -->
          maxQueueSize="100"   <!-- 请求队列最大长度(避免无限制排队)" />
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000" redirectPort="8443" />

说明maxThreads需结合CPU核心数(如物理核心数×2+1)和业务负载调整,避免过大导致线程切换开销。

2.2 连接器协议选择

优先使用NIO(非阻塞I/O)或NIO2(异步I/O)协议,替代默认的BIO(阻塞I/O),提升高并发下的吞吐量:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
           maxThreads="500" connectionTimeout="20000" />

2.3 连接数参数调优

调整<Connector>的关键连接数参数,避免连接被拒绝:

<Connector port="8080" protocol="HTTP/1.1"
           maxThreads="500" minSpareThreads="50" maxConnections="20000"
           acceptCount="1000" connectionTimeout="30000" />

2.4 禁用不必要的功能

3. JVM内存调优

3.1 堆内存设置

通过catalina.sh(或setenv.sh)设置JVM堆内存,避免频繁Full GC:

export JAVA_OPTS="$JAVA_OPTS -Xms2g -Xmx4g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g"

说明

3.2 垃圾回收器选择

优先使用G1GC(Garbage-First Garbage Collector),适用于大内存应用,能有效减少GC停顿时间:

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

可选参数

4. 缓存与压缩优化

4.1 启用HTTP响应压缩

通过server.xml配置Gzip压缩,减少网络传输数据量(适用于文本类响应,如HTML、CSS、JS):

<Connector port="8080" protocol="HTTP/1.1"
           compression="on" compressionMinSize="2048" 
           compressableMimeType="text/html,text/css,application/javascript" />

说明compressionMinSize设置触发压缩的最小响应大小(默认2048字节);compressableMimeType指定需要压缩的MIME类型。

4.2 静态资源缓存

通过web.xml配置静态资源(图片、CSS、JS)的缓存策略,减少重复请求:

<filter>
    <filter-name>ExpiresFilter</filter-name>
    <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
    <init-param>
        <param-name>ExpiresByType image</param-name>
        <param-value>access plus 1 month</param-value>
    </init-param>
    <init-param>
        <param-name>ExpiresByType text/css</param-name>
        <param-value>access plus 1 week</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>ExpiresFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

5. 监控与维护

5.1 监控工具使用

5.2 日志与分析

5.3 定期重启

对于长期运行的Tomcat,定期重启(如每周一次)可释放内存碎片,避免内存泄漏累积导致的性能下降。

0
看了该问题的人还看了