1. 优化JVM内存配置,避免内存溢出
合理分配JVM堆内存是Tomcat稳定的基础。编辑Tomcat启动脚本catalina.sh(位于/usr/share/tomcat/bin/或/opt/tomcat/bin/),调整JAVA_OPTS变量:设置初始堆内存(-Xms)与最大堆内存(-Xmx)一致(如-Xms2048m -Xmx2048m),避免堆内存动态扩展带来的性能波动;根据应用需求设置永久代/元空间大小(如-XX:PermSize=256m -XX:MaxPermSize=512m或-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m);选择合适的垃圾回收器(如G1GC,-XX:+UseG1GC),减少Full GC停顿时间。同时,使用jstat -gcutil <pid> 1000监控内存使用情况,若发现频繁Full GC或内存泄漏,可通过jmap -dump:live,format=b,file=heapdump.hprof <pid>导出堆转储文件,用jhat或VisualVM分析泄漏点。
2. 调整线程池参数,提升并发处理能力
Tomcat的线程池配置直接影响并发性能。在server.xml中,通过<Executor>元素定义线程池(推荐Tomcat 8.5及以上版本),设置maxThreads(最大线程数,建议为CPU核心数的2-4倍,如4核服务器设为80-160)、minSpareThreads(最小空闲线程数,建议为maxThreads的10%-20%,如设为10-20)、acceptCount(等待队列长度,建议为maxThreads的1.5-2倍,如设为120-320)。若使用旧版本,可直接在<Connector>中设置这些参数。例如:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="100" minSpareThreads="20" maxIdleTime="60000"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" acceptCount="200"/>
调整后重启Tomcat(sudo systemctl restart tomcat),并通过top或jconsole监控线程使用情况,避免线程数过多导致内存耗尽。
3. 配置系统资源限制,防止资源耗尽
调整CentOS系统参数,提升Tomcat的资源承载能力。
/etc/security/limits.conf,添加tomcat hard nofile 65535和tomcat soft nofile 65535(tomcat为运行Tomcat的用户),提高单个进程能打开的文件数。/etc/sysctl.conf,添加net.core.somaxconn=2048(增大TCP连接队列长度)、net.ipv4.tcp_tw_reuse=1(复用TIME_WAIT状态的连接),减少连接建立的开销。/etc/rc.local,添加echo never > /sys/kernel/mm/transparent_hugepage/enabled,减少内存碎片,提升内存访问效率。4. 实现高可用性,避免单点故障
通过负载均衡和集群配置,提升Tomcat的整体可用性。
/etc/nginx/nginx.conf),添加upstream模块:upstream tomcat_cluster {
server 192.168.1.1:8080;
server 192.168.1.2:8080;
server 192.168.1.3:8080;
}
server {
listen 80;
location / {
proxy_pass http://tomcat_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
重启Nginx(sudo systemctl restart nginx),实现流量分发。/etc/keepalived/keepalived.conf),添加vrrp_instance:vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 42
}
virtual_ipaddress {
192.168.1.100
}
}
重启Keepalived(sudo systemctl restart keepalived),绑定VIP到Nginx的监听端口,实现高可用。5. 监控与日志分析,及时排查问题
建立完善的监控体系,实时掌握Tomcat的运行状态。
logging.properties文件,调整日志级别(如org.apache.catalina.level=INFO),记录关键事件;使用ELK Stack(Elasticsearch+Logstash+Kibana)集中管理日志,分析异常请求(如4xx/5xx错误)和性能瓶颈。6. 应用层优化,减少Tomcat负担
server.xml中的<Connector port="8009" protocol="AJP/1.3" />配置,减少资源消耗。server.xml的<Connector>中添加compression="on",开启HTTP响应压缩(支持gzip),减少网络传输数据量,提升响应速度。synchronized),优化代码逻辑,降低Tomcat的负载。