centos

centos上tomcat配置有哪些最佳实践

小樊
42
2025-10-05 00:18:01
栏目: 智能运维

CentOS上Tomcat配置最佳实践

一、系统级基础优化

1. 操作系统内核参数调优

调整内核参数以提升网络并发处理能力和系统稳定性。编辑/etc/sysctl.conf文件,添加以下关键参数:

2. 文件描述符限制调整

Tomcat处理高并发时需要大量文件描述符,需提高用户级限制。编辑/etc/security/limits.conf文件,添加:
* soft nofile 65536(软限制,临时生效)
* hard nofile 65536(硬限制,永久生效)
同时修改/etc/pam.d/common-session/etc/pam.d/common-session-noninteractive,添加session required pam_limits.so,确保限制生效。

3. 禁用透明大页(Transparent Huge Pages)

透明大页会导致内存碎片和性能下降,需在系统启动时禁用。编辑/etc/rc.local文件,添加:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
赋予执行权限chmod +x /etc/rc.local

二、Tomcat自身配置优化

1. 线程池配置(关键性能瓶颈)

通过server.xml中的Executor定义全局线程池,再关联到Connector,避免每个Connector单独创建线程池。示例配置:

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
          maxThreads="500"    <!-- 最大线程数根据CPU核心数调整如8核建议200-500-->
          minSpareThreads="50" <!-- 最小空闲线程数(保持活跃线程,减少创建开销) -->
          maxQueueSize="100"   <!-- 请求队列长度(队列满则拒绝请求)" />
<Connector executor="tomcatThreadPool" 
           port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" 
           connectionTimeout="20000" 
           keepAliveTimeout="15000" 
           maxKeepAliveRequests="100" <!-- 限制长连接请求数,避免闲置连接占用资源 -->
           redirectPort="8443" />

说明maxThreads需结合服务器硬件(CPU、内存)和应用特性调整,建议通过压力测试确定最优值。

2. 连接器(Connector)优化

3. JVM内存参数调优

通过catalina.sh(Linux)或catalina.bat(Windows)设置JVM内存,避免内存溢出(OutOfMemoryError)。关键参数:

JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xmn1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

说明

4. 字符编码设置

避免中文乱码,在Connector中添加URIEncoding="UTF-8",确保URL中的中文参数正确解析。

5. 端口与域名配置

三、安全配置

1. 隐藏版本信息

修改server.xml中的Server标签,添加server="Apache"(或其他虚假信息),避免暴露Tomcat版本,减少针对性攻击:

<Server port="8005" shutdown="SHUTDOWN" server="Apache">

2. 禁用不必要的组件

3. 强化用户权限

四、连接池优化(数据库访问性能关键)

1. 选择高性能连接池

推荐使用HikariCP(轻量、高性能),替代Tomcat自带的DBCP。在context.xml中配置示例:

<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
          factory="com.zaxxer.hikari.HikariJNDIFactory"
          jdbcUrl="jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC"
          username="user" password="password"
          maximumPoolSize="20"       <!-- 最大活跃连接数 -->
          minimumIdle="5"            <!-- 最小空闲连接数 -->
          connectionTimeout="30000"  <!-- 连接超时时间(毫秒) -->
          idleTimeout="600000"       <!-- 空闲连接超时时间(毫秒) -->
          maxLifetime="1800000"      <!-- 连接最大生命周期(毫秒) -->
          validationQuery="SELECT 1" <!-- 连接有效性验证SQL -->
          testWhileIdle="true"       <!-- 空闲时检查连接有效性 -->
          testOnBorrow="false"       <!-- 借用时不检查(减少开销) -->
          testOnReturn="false"       <!-- 归还时不检查 -->
          poolPreparedStatements="true" <!-- 预编译语句池化 -->
          maxPoolPreparedStatementPerConnectionSize="20" />

2. 连接池监控

通过Tomcat Manager应用或JMX接口监控连接池状态(如活跃连接数、等待连接数),及时发现连接泄漏或配置不合理问题。

五、部署与维护规范

1. 清理默认内容

删除webapps目录下的默认应用(如ROOTdocsexamplesmanager),避免不必要的资源占用和安全风险。

2. 日志管理

定期检查logs目录下的日志文件(catalina.outlocalhost_access_log.*.txt),分析错误日志(如SEVERE级别)和访问日志,定位性能瓶颈或安全问题。可通过logrotate工具实现日志轮转,避免日志文件过大。

3. 定期更新

及时更新Tomcat至最新稳定版本(修复已知漏洞),并同步更新Java环境和依赖库(如数据库驱动),提升系统安全性和稳定性。

0
看了该问题的人还看了