Linux环境下Tomcat性能调优技巧
系统参数的调整直接影响Tomcat对硬件资源的利用效率,需重点优化以下关键项:
ulimit -n查看当前值,修改/etc/security/limits.conf(如* soft nofile 65536; * hard nofile 65536)并重启系统,避免因文件描述符耗尽导致连接拒绝。vm.swappiness(默认60)可减少系统使用交换空间的频率,提升物理内存利用率。通过echo 10 > /proc/sys/vm/swappiness临时设置,或修改/etc/sysctl.conf永久生效。/etc/sysctl.conf中添加:net.ipv4.tcp_rmem = 4096 87380 16777216(接收缓冲区)、net.ipv4.tcp_wmem = 4096 87380 16777216(发送缓冲区),并执行sysctl -p应用配置。线程池是Tomcat处理并发请求的关键,需根据服务器硬件(CPU核心数、内存)调整以下参数(位于server.xml的<Connector>标签内):
maxThreads的10%-20%(如maxThreads=100时,设置为10-20)。maxThreads的1.5-2倍(如maxThreads=100时,设置为150-200),避免队列满导致连接拒绝。优先使用**NIO(Non-blocking I/O)或APR(Apache Portable Runtime)**协议替代传统的BIO(Blocking I/O),提升高并发下的性能。在server.xml中配置:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
NIO通过事件驱动模型减少线程阻塞,适合高并发场景;APR则利用本地库提升IO性能,但需安装apr、apr-util等依赖。
通过压缩响应内容减少网络传输量,提升页面加载速度。在server.xml的<Connector>标签中添加:
compression="on"
compressionMinSize="1024"
compressableMimeType="text/html,text/xml,text/plain,text/css,application/javascript,application/json" />
compression="on":开启压缩功能。compressionMinSize="1024":仅压缩大于1KB的响应内容(避免小文件压缩反而增加CPU开销)。compressableMimeType:指定需要压缩的MIME类型(覆盖HTML、CSS、JS、JSON等静态资源)。JVM的配置直接影响Tomcat的稳定性和响应速度,需重点调整以下参数(位于catalina.sh或catalina.bat中):
-Xms(初始堆大小)和-Xmx(最大堆大小)为相同值(如-Xms2G -Xmx2G),避免堆扩容带来的性能波动;年轻代(-Xmn)设置为堆的1/4(如-Xmn512m),提升Minor GC效率。-XX:+UseG1GC启用,可设置-XX:MaxGCPauseMillis=200(目标最大GC停顿时间,单位毫秒)。-XX:+UseParallelGC -XX:+UseParallelOldGC启用,提升多核CPU利用率。-XX:+UseParallelClassLoading设置。静态资源(图片、CSS、JS、字体等)的处理会消耗Tomcat的CPU和内存,需通过以下方式优化:
server.xml中配置Expires或Cache-Control头,让浏览器缓存静态资源(如<Context antiResourceLocking="true" cachingAllowed="true" cacheMaxSize="100000" />),降低重复请求次数。gzip on;配置),减少传输体积。数据库访问是应用性能的关键瓶颈,需通过连接池优化提升数据库操作的效率:
maxActive:最大连接数,设置为数据库能承受的最大并发连接数(如MySQL的max_connections参数)。maxIdle:最大空闲连接数,避免连接过多占用数据库资源(如设置为maxActive的50%)。minIdle:最小空闲连接数,保持一定数量的空闲连接以快速响应请求(如设置为maxActive的10%)。connectionTimeout:连接超时时间(如3000毫秒),避免长时间等待数据库连接。性能调优是一个持续的过程,需通过监控工具实时了解Tomcat的运行状态,针对性调整:
Manager应用(/manager/html)查看当前线程池使用情况、内存占用、请求处理时间等指标。catalina.out、localhost.log等日志文件,定位内存溢出(OutOfMemoryError)、线程死锁等问题,及时修复。