1. 代码级优化:从根源减少慢查询产生
通过Arthas等性能分析工具对代码进行trace,定位接口处理中耗时较长的环节(如数据组装、循环计算、不必要的数据库访问),针对性优化代码逻辑。例如,减少循环内的重复查询,将串行操作改为并行处理,优化数据结构(如用HashMap替代List进行快速查找),降低CPU和内存占用。
2. 数据库查询优化:解决慢查询核心瓶颈
SELECT *,只查询必要字段;使用覆盖索引(查询字段均在索引中)减少回表操作;合理使用LIMIT限制结果集大小(如分页查询时用LIMIT offset,size);替换低效操作符(如用EXISTS代替IN,用JOIN代替子查询)。EXPLAIN命令查看SQL执行计划,关注type列(理想值为ref或range,避免ALL全表扫描),优化索引使用情况。3. Tomcat配置优化:提升请求处理能力
server.xml的<Connector>标签中调整线程池参数(如maxThreads设为100-200,根据并发量调整;minSpareThreads设为20-50,保持最小空闲线程;maxSpareThreads设为50-100,避免过多空闲线程占用内存),提高并发处理能力。logging.properties中将日志记录方式改为异步(如java.util.logging.ConsoleHandler.level = FINE配合异步处理器),减少主线程因日志写入的阻塞,提升请求响应速度。connectionTimeout参数设置网络连接超时时间(如20000毫秒),避免长时间等待数据库或外部接口响应,及时释放资源。4. JVM参数优化:减少GC停顿影响
-Xms和-Xmx设为物理内存的70%-80%,避免频繁扩容),设置新生代(-Xmn,如占总堆的1/3-1/2)和老年代比例(-XX:NewRatio,如2表示新生代:老年代=1:2),优化对象晋升流程。-XX:+UseG1GC开启G1,设置-XX:MaxGCPauseMillis目标停顿时间(如200毫秒),减少GC对系统性能的影响。5. 缓存技术应用:降低数据库访问频率
query_cache_type=1,query_cache_size=64M),缓存SELECT查询结果,对于重复查询直接返回缓存数据(注意:MySQL 8.0及以上版本已移除查询缓存)。6. 日志管理与监控:快速定位慢查询
pt-query-digest(针对MySQL慢查询日志)、ELK Stack(Elasticsearch+Logstash+Kibana)或Graylog等工具,分析Tomcat慢查询日志(如catalina.out或访问日志中的%D字段,表示请求处理时间),找出执行时间长、频率高的SQL语句。cronolog或Tomcat的AccessLogValve配置(如rotatable="true"),按日期分割日志文件(如localhost_access_log.2025-09-17.txt),避免日志文件过大占用磁盘空间,便于历史查询。