性能测试瓶颈排查步骤速查表(线上 TPS 上不去快速定位流程)

📅 2026/7/1 3:58:43
性能测试瓶颈排查步骤速查表(线上 TPS 上不去快速定位流程)
性能瓶颈排查速查表TPS上不去/响应突增 完整定位流程整体排查逻辑先压测指标 → 服务器资源监控 → 应用JVM → 数据库 → 中间件 → 代码/配置一、第一步看JMeter聚合报告初步锁定方向1. 三类典型现象对应瓶颈大类现象初步判断瓶颈区域TPS不涨、95%响应持续升高、错误率0资源排队阻塞线程池、数据库、锁TPS下跌、Error%飙升、大量超时服务/数据库过载、连接耗尽、网络丢包TPS波动大、响应忽高忽低缓存击穿、定时任务、慢SQL突发、GC停顿核心指标快速判断Error% 0优先解决报错超时、鉴权、数据库连接满95%Line远大于平均响应存在大量慢请求/阻塞等待Throughput(TPS) 随并发上涨几乎不变系统存在硬性瓶颈二、第二步服务器硬件资源监控nmon / Prometheus / top逐个检查4大资源哪个打满就是第一层瓶颈1. CPU占用应用CPU持续80%① 代码循环、复杂计算、频繁序列化/反序列化② JVM频繁Full GC③ 大量同步锁竞争上下文切换频繁MySQL CPU持续80%慢SQL、无索引、全表扫描、多表关联2. 内存应用堆内存持续上涨不回落内存泄漏稳定性测试高频问题频繁触发Swap交换分区物理内存不足磁盘交换严重拖慢响应3. 磁盘IOiostat查看%util%util接近100%磁盘IO打满诱因MySQL大量写入、无索引查询、日志疯狂打印、大批量数据落库4. 网络带宽网卡出入流量跑满大报文返回、文件上传下载、大量接口返回全量列表三、第三步Java应用JVM专项排查CPU/内存异常必查GC日志查看Minor GC频繁新生代内存分配过小Full GC频繁、停顿时间长老年代不足、内存泄漏、大对象频繁创建线程栈jstackjstack-l进程PIDthread.log大量WAITING线程池无空闲线程、CountDownLatch等待大量BLOCKEDsynchronized同步锁竞争激烈堆内存快照jmapjmap-dump:formatb,fileheap.hprof PID导入MAT分析定位泄漏对象、无用大对象占用内存四、第四步数据库MySQL90%性能瓶颈根源1. 慢查询日志开启慢日志抓取耗时200ms SQL执行explain分析typeALL全表扫描缺失索引keynull索引失效rows扫描行数巨大分页limit过大、无过滤条件2. 连接池show status like Threads_connected;连接数达到max_connections → 连接池耗尽请求超时报错3. 事务与锁show engine innodb status;长事务未提交行锁持续占用大量锁等待、死锁并发下阻塞请求4. 写入瓶颈大批量insert无分表、无批量插入单条循环入库拖慢吞吐五、第五步中间件排查Redis/MQRedisCPU高热点key大value、频繁复杂计算keys、hgetall大量缓存击穿同一不存在key并发查询全部打到DB缓存雪崩批量key同一时间过期数据库瞬间压力暴增MQ消息堆积消费速度生产速度内存占用持续上涨同步发送等待MQ响应阻塞业务接口六、第六步应用配置类瓶颈极易忽略Tomcat/NIO线程池maxThreads配置过小并发上来无空闲线程MySQL/Redis连接池maxActive过小请求排队等待连接日志级别INFO/DEBUG疯狂打印磁盘IO阻塞接口接口返回超大List一次性查询千条数据序列化耗时高同步化流程可异步逻辑全部同步执行短信、消息推送七、标准化排查执行流程直接照着操作场景1并发上涨TPS不动无报错看服务器CPU/IO是否打满导出jstack查看线程是否大量阻塞查看MySQL慢查询是否存在高频慢SQL核对Tomcat、数据库连接池参数是否过小检查是否有全局同步锁、串行化代码场景2长时间压测后响应越来越慢JVM监控堆内存持续上涨 → 内存泄漏dump堆快照分析数据库临时表/脏数据堆积查询越来越慢Redis内存持续膨胀淘汰策略频繁触发场景3TPS周期性波动每隔几分钟突降定时任务报表、数据同步、缓存刷新抢占资源定时GCFull GC停顿导致接口卡顿批量缓存key集中过期瞬时打穿数据库场景4并发一高就大量报错超时/500MySQL连接池耗尽调大max_connectionsTomcat线程池打满调大maxThreads网络带宽跑满、防火墙限流Redis连接耗尽无法获取缓存数据八、配套排查命令Linux一键复制1. 服务器资源总览topiostat-x1free-h2. JVM线程/堆分析# 查看java进程PIDps-ef|grepjava# 线程快照jstack-lPIDthread_dump.log# 堆dump快照jmap-dump:formatb,fileheap.hprof PID# GC实时监控jstat-gcPID10003. MySQL实时监控-- 当前连接showstatuslikeThreads_connected;-- 慢查询开启setslow_query_log1;-- 查看锁等待showengineinnodbstatus;4. Redis监控redis-cli info stats redis-cli info server九、通用优化优先级按落地见效快慢排序数据库慢SQL加索引见效最快收益最高调小接口返回数据量、分页查询、避免全量查询扩容线程池/连接池基础配置异步化非核心业务推送、日志、统计缓存优化避免击穿、雪崩JVM参数调优、修复内存泄漏代码服务集群扩容水平分担并发压力