一、Linux系统性能优化
1.1 内存管理优化
Linux内存管理直接影响应用运行效率,需重点关注vm.swappiness和vm.dirty_ratio参数。建议将vm.swappiness设为10(默认60),减少不必要的swap交换:
echo "vm.swappiness=10" >> /etc/sysctl.confsysctl -p
对于高并发写入场景,调整vm.dirty_background_ratio=5和vm.dirty_ratio=15,平衡脏页刷新频率与内存占用。
1.2 文件系统调优
XFS文件系统在高并发写入时表现优异,建议使用noatime挂载选项减少元数据更新:
mount -o remount,noatime /data
针对MySQL数据目录,建议单独分区并使用ext4文件系统的data=writeback模式(需内核支持),可提升I/O性能约20%。
1.3 网络栈优化
TCP连接优化需关注三个核心参数:
# 增大连接队列echo 4096 > /proc/sys/net/core/somaxconn# 启用TIME_WAIT重用echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse# 调整TCP缓冲区echo "net.ipv4.tcp_mem=10000000 10000000 10000000" >> /etc/sysctl.conf
对于万兆网络环境,建议将net.core.rmem_max和net.core.wmem_max提升至16MB。
二、MySQL数据库优化
2.1 存储引擎选择
InnoDB是默认选择,需重点关注三个参数:
-- 增大缓冲池(建议物理内存的50-70%)SET GLOBAL innodb_buffer_pool_size=8G;-- 优化日志文件大小SET GLOBAL innodb_log_file_size=1G;-- 启用自适应哈希索引SET GLOBAL innodb_adaptive_hash_index=ON;
对于只读场景,可考虑MyISAM引擎并设置key_buffer_size=2G。
2.2 查询优化策略
通过慢查询日志定位性能瓶颈:
-- 开启慢查询日志SET GLOBAL slow_query_log=ON;SET GLOBAL long_query_time=1;-- 优化索引策略ALTER TABLE orders ADD INDEX idx_customer(customer_id);
使用EXPLAIN分析查询执行计划,重点关注type列(应达到range级别以上)。
2.3 连接池配置
连接池大小计算模型:
最大连接数 = (核心数 * 2) + 磁盘数量
建议设置max_connections=300,配合thread_cache_size=100减少线程创建开销。
三、Nginx反向代理优化
3.1 工作进程调优
根据CPU核心数配置worker进程:
worker_processes auto; # 自动检测CPU核心数worker_rlimit_nofile 65535; # 增大文件描述符限制events {worker_connections 4096; # 单进程最大连接数}
3.2 静态资源处理
启用gzip压缩和缓存:
gzip on;gzip_types text/css application/javascript;location ~* \.(jpg|png|css)$ {expires 30d;add_header Cache-Control "public";}
测试显示,启用gzip后HTML传输量可减少60%-80%。
3.3 动态请求转发
优化upstream模块配置:
upstream tomcat_cluster {server 127.0.0.1:8080 weight=5;server 127.0.0.1:8081;keepalive 32; # 保持长连接}
建议设置proxy_buffer_size 16k和proxy_buffers 8 16k处理大响应体。
四、Tomcat应用服务器优化
4.1 线程池配置
根据并发量调整线程模型:
<!-- server.xml配置示例 --><Executor name="tomcatThreadPool"namePrefix="catalina-exec-"maxThreads="300"minSpareThreads="20"prestartminSpareThreads="true"/>
计算公式:最大线程数 = (平均响应时间(ms)/1000) * QPS
4.2 JVM参数调优
推荐GC参数组合:
JAVA_OPTS="-Xms4G -Xmx4G -XX:MetaspaceSize=256M-XX:+UseG1GC -XX:InitiatingHeapOccupancyPercent=35"
对于高吞吐场景,可考虑-XX:+UseParallelGC。
4.3 连接器优化
NIO连接器配置建议:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"connectionTimeout="20000"acceptorThreadCount="2"maxThreads="300"minSpareThreads="20"enableLookups="false"redirectPort="8443" />
测试表明,NIO比BIO模式在并发1000+时性能提升3倍以上。
五、综合监控方案
实施性能优化后,需建立监控体系:
- 基础监控:使用
vmstat 1、iostat -x 1监控系统资源 - 应用监控:通过Prometheus+Grafana收集JVM、MySQL指标
- 日志分析:ELK栈集中分析Nginx和Tomcat访问日志
建议设置告警阈值:
- CPU使用率 > 85%持续5分钟
- 磁盘I/O等待 > 30%
- MySQL连接数 > 最大连接数的80%
六、优化实施路线图
- 基准测试:使用sysbench、ab工具建立性能基线
- 分阶段优化:按Linux→MySQL→Nginx→Tomcat顺序调整
- 验证测试:每次修改后进行回归测试
- 文档记录:维护优化参数变更记录表
实际案例显示,综合优化后系统吞吐量可提升3-8倍,响应时间降低50%-70%。建议每季度进行性能复审,根据业务发展动态调整参数。