生产环境 Tomcat 优化详解
优化生产环境中的 Tomcat 服务器涉及多个方面,包括性能调优、资源管理、安全性增强和稳定性保障。
性能调优
内存设置
调整 JVM 内存参数:
- 设置合适的初始堆大小(
-Xms
)和最大堆大小(-Xmx
),根据服务器的物理内存配置。典型设置如下:1
2-Xms2048m
-Xmx4096m
- 设置合适的初始堆大小(
调整方法区大小:
- 对于 Java 7 及以前版本,可以设置永久代大小(
-XX:PermSize
和-XX:MaxPermSize
)。 - 对于 Java 8 及以后版本,可以调整元空间大小(
-XX:MetaspaceSize
和-XX:MaxMetaspaceSize
)。
- 对于 Java 7 及以前版本,可以设置永久代大小(
垃圾收集器
- 选择合适的垃圾收集器:
- 根据应用程序的特点选择合适的垃圾收集器,例如:
- 并行垃圾收集器(
-XX:+UseParallelGC
) - CMS(
-XX:+UseConcMarkSweepGC
) - G1(
-XX:+UseG1GC
)
线程池优化
调整 I/O 模型:
- 比如,配置 Tomcat 使用 NIO、APR 这种相比于 BIO 更加高效的 I/O 模型。
- 对于 Tomcat 7 及以前版本,默认使用的是 BIO。
- 对于 Tomcat 8 及以后版本,默认使用的是 NIO。
- 比如,配置 Tomcat 使用 NIO、APR 这种相比于 BIO 更加高效的 I/O 模型。
配置连接器线程池:
- 调整
maxThreads
参数来设置 Tomcat 处理连接所能创建的最大线程数。 - 调整
minSpareThreads
参数来设置 Tomcat 在空闲时保持的最小线程数。 - 调整
maxSpareThreads
参数来设置 Tomcat 在空闲时保持的最大线程数。1
2
3
4<Connector port="8080" protocol="HTTP/1.1"
maxThreads="200" minSpareThreads="25" maxSpareThreads="75"
...
/>
- 调整
资源管理
数据库连接池
- 优化数据库连接池:
- 配置合适的数据库连接池大小(
maxActive
)、连接超时时间(maxWait
)和空闲连接数(minIdle
、maxIdle
)以确保高效的数据库访问。1
2
3
4
5<Resource name="jdbc/myDB" auth="Container"
type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"
username="user" password="password"
maxActive="100" maxIdle="30" minIdle="10" maxWait="10000"/>
- 配置合适的数据库连接池大小(
静态资源缓存
- 启用静态资源缓存:
- 配置 Tomcat 缓存静态资源,如 CSS、JS 和图片,减少对这些资源的重复请求。
1
2
3<Context ...>
<Resources cachingAllowed="true" cacheMaxSize="100000" />
</Context>
- 配置 Tomcat 缓存静态资源,如 CSS、JS 和图片,减少对这些资源的重复请求。
安全性增强
禁用不必要的端口
安全配置
配置安全的连接:
- 使用 SSL/TLS 加密通信,确保数据传输的安全性。
1
2
3
4
5
6
7<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/keystore.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
- 使用 SSL/TLS 加密通信,确保数据传输的安全性。
关闭不必要的端口和服务:
- 仅启用应用程序实际需要的服务,关闭不必要的端口,如 AJP 端口。
1
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="::1" />
- 仅启用应用程序实际需要的服务,关闭不必要的端口,如 AJP 端口。
稳定性保障
会话管理
- 会话持久化:配置会话持久化机制(如持久化到文件系统),以确保服务器重启后会话数据不丢失。
1
2
3
4
5<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true"
maxIdleBackup="30">
<Store className="org.apache.catalina.session.FileStore"/>
</Manager>
日志管理
- 配置日志记录:
- 确保 Tomcat 的日志记录适当配置,使用日志轮转策略(如 Logrotate)防止日志文件过大。
1
2
3<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
- 确保 Tomcat 的日志记录适当配置,使用日志轮转策略(如 Logrotate)防止日志文件过大。
监控与报警
监控工具
使用监控工具:
- 部署监控工具(如 Prometheus、Grafana 等)监控 Tomcat 的性能和健康状态。
启用 JMX 监控:
- 可以通过 JMX 导出 Tomcat 的性能指标。
1
2<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
rmiRegistryPortPlatform="8099" rmiServerPortPlatform="8098" />
- 可以通过 JMX 导出 Tomcat 的性能指标。